getgrent() 函数原型如下:
[Plain Text] 纯文本查看 复制代码 #include <sys/types.h>
#include <grp.h>
struct group *getgrent(void);
void endgrent(void);
getgrent() 函数每次读取 /etc/group 中的一项数据,可以循环调用该函数,直至到无任何数据可读,此时函数返回 NULL 。
读取到的组数据返回在 struct group 这个结构里,该结构定义如下:
[C++] 纯文本查看 复制代码 struct group {
char *gr_name; /* 组名 */
char *gr_passwd; /* 组密码 */
gid_t gr_gid; /* GID */
char **gr_mem; /* 组成员 */
};
当我们读完数据时可以用 endgrent() 函数来关闭组数据文件。
测试代码:
[C++] 纯文本查看 复制代码 #include <stdio.h>
#include <sys/types.h>
#include <grp.h>
int main()
{
struct group *gdata;
int i;
while ((gdata = getgrent())) {
i = 0;
printf ("%s:%s:%d\n", gdata->gr_name, gdata->gr_passwd, gdata->gr_gid);
while(gdata->gr_mem[i])
printf ("%s,", gdata->gr_mem[i++]);
}
endgrent();
return 0;
}
运行输出:
[quote]
beyes@linux-xh53:~/c/lib/chap7> ./getgrent
at:!:25
audio:x:17
... ...
... ...
www:x:8
xok:x:41
users:$6$lUHQ6bHE7OMY$DyHZmZ8nUK7UhdeAex.GFm57uyU0r5vQfrxX3AKlOldxSjsxWWNaX.J9vOB0Zbee1G9bZH7D7fssWaWjDvsoZ1:100[/mw_shl_code]
上面最后一行中间的一长串字符是组密码。
关于 /etc/group ,组密码等相关概念可参考:理解 /etc/group 文件格式 》和 《gpasswd -- 设定组密码 | newgrp -- 临时获取其他组的组权限 |