c - 函数 getgrgid() 在无人调用时返回 NULL

标签 c linux embedded-linux

我在嵌入式设备上使用了 LTP(Linux 测试项目)。设备卡在测试用例setfsgid03中的while循环中,因为getgrgid()在被nobody调用时总是返回NULL。 它在嵌入式设备上被 root 调用时工作正常。当它被 nobody 调用时,它在 x86 linux 主机上工作正常。

是否是设备上的linux配置导致的?

相关代码片段如下:

gid = 1;
while (!getgrgid(gid))
    gid++;

最佳答案

getgrgid将从 /etc/group 中读取条目或者更普遍地使用 Glibc 来自 /etc/nsswitch.conf 中指定的来源.如果/etc/group不存在或除 gid 外没有其他组那么此代码将至少循环直到 gid 的环绕/签名溢出.如果只有 nobody 的条目在 pid -2也需要很长时间才能找到 pid .

总而言之,代码非常糟糕。我只是确保 /etc/group 中有一个条目用 GID 2 说; 正确的 找到定义的非 root gid 的方法是使用 getgrent_r依次直到返回的记录有gr_gid != 0,如果在找到这样一条记录之前返回 NULL,则失败。

关于c - 函数 getgrgid() 在无人调用时返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51436489/

相关文章:

c - 将一个字符串复制到另一个字符串的程序(包含该函数)正在打印奇怪的字符

linux - 在 csv 文件中替换\n

linux - 如何构建 gvim 可执行文件

php - 如何从 PHP 使用 bash 脚本?

将多个程序编译成一个二进制文件以节省空间

c - 未初始化和空指针之间的区别

c - 使用管道进行进程通信

我能否保证在 select() 报告套接字已准备好读取后 recv() 不会阻塞?

linux-kernel - 在运行时调整 MTD 分区的大小

linux - 使用 linux I2C 驱动程序