1

请让我知道如何在 Objective-C 中获取当前登录用户的用户 ID。我想获取当前在本地使用计算机的登录用户的用户 ID。我的命令行程序以 root 身份运行,我想找到当前登录用户的用户 ID。谢谢。

4

3 回答 3

4

SCDynamicStoreCopyConsoleUser() 可能对您有用。它将返回当前控制台用户的 uid 和 gid。

https://developer.apple.com/library/mac/#documentation/Networking/Reference/SCDynamicStoreCopySpecific/Reference/reference.html

https://developer.apple.com/library/mac/#qa/qa2001/qa1133.html

于 2013-04-02T22:46:11.767 回答
3

您可以使用NSUserName(). 这将返回当前登录用户的名称。

NSString *userName = NSUserName();

此外,还有一个NSFullUserName()功能。

NSFullUserName() // "John Doe"
NSUserName()     // "jdoe"
于 2013-04-02T22:19:40.057 回答
2

在 macOS 上,可以同时登录多个用户。使用utmpx函数迭代用户会话。

SCDynamicStoreCopyConsoleUser

要发现具有活动图形会话的用户,请SCDynamicStoreCopyConsoleUser使用SystemConfiguration.framework.

请注意,Apple 的QA1133提到此功能将来可能会被弃用:

警告:用于确定当前控制台用户的系统配置框架机制有许多重要的警告:

  • 它假定计算机有一个 GUI 控制台。虽然目前确实如此,但可能不会永远如此。如果您使用这种技术,如果这种情况发生变化,您将不得不更改您的代码。
  • 它无法指示多个用户已登录。
  • 它无法指示用户已登录但已切换到登录窗口。

由于这些问题,像 SCDynamicStoreCopyConsoleUser 这样的例程仅出于兼容性目的而存在。它们很可能会在未来的 Mac OS X 版本中被正式弃用。

的主人/dev/console

另一种方法是fstat路径/dev/console

struct stat info;
if (lstat(_PATH_CONSOLE,&info) == 0) {
    printf("%s is owned by %d\n",_PATH_CONSOLE,info.st_uid);
}
于 2016-11-07T15:59:28.930 回答