曲径通幽论坛

标题: getgrent() -- 从组文件中取得账户信息 | endgrent() -- 关闭组数据文件 [打印本页]

作者: beyes    时间: 2011-12-25 21:52
标题: getgrent() -- 从组文件中取得账户信息 | endgrent() -- 关闭组数据文件
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)
                        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 -- 临时获取其他组的组权限





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2