曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3853|回复: 0
打印 上一主题 下一主题

[用户与组] getgrent() -- 从组文件中取得账户信息 | endgrent() -- 关闭组数据文件

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-12-25 21:52:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 -- 临时获取其他组的组权限
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 02:43 , Processed in 0.078076 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表