【问题标题】:list of uids / names of System Preferences > Accounts系统偏好设置 > 帐户的 uids / 名称列表
【发布时间】:2011-02-28 07:28:15
【问题描述】:

如何获取带有 uid 和名称的数组?

我可以从 0 迭代到 99999 并执行 getpwnam()。 但是,大多数机器的帐户少于 5 个,因此不是最佳选择。我不知道是什么框架对此负责,因此我不知道要搜索什么。

有没有更优化的方案可以遍历账户?

编辑:在我发布之后,我发现getpwent() 用于遍历帐户。

setpwent();
struct passwd *pw;
while ((pw = getpwent())) printf("%d\n", pw->pw_uid);
endpwent();

但这并不表示一个帐户是否是系统偏好帐户。

那么,如何获得系统偏好设置帐户呢?


编辑:我找到了与此等效的命令行,dscl 命令。

prompt> dscl . -list /Users UniqueID
_mysql                  74
_postfix                27
_spotlight              89
_sshd                   75
_windowserver           88
_www                    70
daemon                  1
johndoe                 501
nobody                  -2
root                    0

【问题讨论】:

    标签: cocoa macos getpwnam getpwuid dscl


    【解决方案1】:

    使用getgrnam("staff") 获取员工组的组记录。 gr_mem 成员虽然没有在手册页中详细解释,但似乎是一个由 NULL 指针终止的用户名数组。

    要查找哪些用户是管理员,对 admin 组执行相同的操作。

    【讨论】:

    • 嗯,我有 4 个帐户(simon、neoneye、johndoe、testuser1),但其中两个未列在人员组中,即使它们在人员组中。我看到的是 STAFF:root,ADMIN:root,ADMIN:neoneye,ADMIN:simon 我在任何地方都没有看到我的 johndoe,也没有看到我的 testuser1。也许还有更多? if(gr = getgrnam("staff")) { for (i=0; gr->gr_mem[i]!=0; ++i) { NSLog(@"STAFF: %s",gr->gr_mem[i ]); }
    • neoneye:我看到你已经接受了这个答案。我认为你有它的工作,那么?出了什么问题?
    • 对不起,我接受了,但不幸的是 getgrnam("staff") 似乎没有列出我系统上的所有帐户,所以我想我必须寻找另一种解决方案。 iirc SystemConfiguration api中有一些用户帐户信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多