【问题标题】:Swift: How to get Console User, UID, and GID via SCDynamicStoreCopyConsoleUser?Swift:如何通过 SCDynamicStoreCopyConsoleUser 获取控制台用户、UID 和 GID?
【发布时间】:2014-07-06 00:47:40
【问题描述】:

我可以使用 python 从 SCDynamicStoreCopyConsoleUser 获取用户名、UID 和 GID:

 #!/usr/bin/python
 from SystemConfiguration import SCDynamicStoreCopyConsoleUser
 cfuser = SCDynamicStoreCopyConsoleUser( None, None, None )
 print cfuser[0] # Returns console user, e.g.: myUsername
 print cfuser[1] # Returns console user’s UID, e.g.: 501
 print cfuser[2] # Returns console user’s GID, e.g.: 20

如何使用 Swift 获得同样的回报?

SCDynamicStoreCopyConsoleUser 的 Swift 声明

 func SCDynamicStoreCopyConsoleUser(_ store: SCDynamicStore!,
                                    _ uid: CMutablePointer<uid_t>,
                                    _ gid: CMutablePointer<gid_t>) -> Unmanaged<CFString>!

我的 Swift 调用

 var uid: CMutablePointer<uid_t>!
 var gid: CMutablePointer<gid_t>!

 var cfuser: NSArray = [SCDynamicStoreCopyConsoleUser(nil,uid,gid)]

 // the return has only one element containing the username

【问题讨论】:

    标签: objective-c macos cocoa swift


    【解决方案1】:

    Swift 函数SCDynamicStoreCopyConsoleUser 接受CMutablePointer&lt;uid_t&gt; 参数,这意味着您必须传递uid_t 变量的地址。 您还应该检查调用是否成功(否则返回nil), 和你 必须转换返回的非托管对象,如中所述 Working with Cocoa Data Types

    import SystemConfiguration
    
    var uid: uid_t = 0
    var gid: gid_t = 0
    
    if let theResult = SCDynamicStoreCopyConsoleUser(nil, &uid, &gid) {
        let name = theResult.takeUnretainedValue()
        println("name = \(name), uid = \(uid), gid = \(gid)")
    } else {
        println("failed")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      相关资源
      最近更新 更多