请让我知道如何在 Objective-C 中获取当前登录用户的用户 ID。我想获取当前在本地使用计算机的登录用户的用户 ID。我的命令行程序以 root 身份运行,我想找到当前登录用户的用户 ID。谢谢。
问问题
3195 次
3 回答
4
SCDynamicStoreCopyConsoleUser() 可能对您有用。它将返回当前控制台用户的 uid 和 gid。
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 回答