微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 getgrent 在 macOS 上为员工组返回两个条目?

如何解决为什么 getgrent 在 macOS 上为员工组返回两个条目?

代码块打印所有用户组。每行包含指向 struct group 的指针地址、组的名称和 ID,以及该组的所有成员。

#include <stdio.h>
#include <grp.h>

int main() {
    setgrent();
    struct group *grp;
    while (grp = getgrent()) {
        printf("%p -> {%s,%s,%d}: ",grp,grp->gr_name,grp->gr_passwd,grp->gr_gid);
        for (int i = 0; grp->gr_mem[i]; i++) {
            printf("%s,",grp->gr_mem[i]);
        }
        printf("\n");
    }
    endgrent();
}

特别有趣的是结果中的这两行:

...
0x7fc6267195f0 -> {staff,*,20}: root,_serialnumberd,...
0x7fc626700740 -> {staff,...

然而,查看 /etc/groupstaff 只有一行。

staff:*:20:root

是什么导致了 staff 的额外行被上面的代码块打印出来,为什么它们会有一个成员不同?

我使用的是 macOS Mojave 10.14.6。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。