Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1736409
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-29 12:29:21

UNIX系统的组文件,被POSIX.1称为组数据库,包含了下表展示的域。这些域被一个group结构体包含,定义在里。


/etc/group文件的域
描述 结构体group的成员 POSIX.1 FreeBSD 5.2.1 Linux 2.4.22 Mac OS X 10.3 Solaris 9
组名 char *gr_name * * * * *
加密密码 char *gr_passwd   * * * *
数值化组ID int gr_gid * * * * *
指向各个用户名的指针数组 char **gr_mem * * * * *


域gr_mem是一个指向属于该组的用户名的指针数组。这个数组由空指针结束。


我们可以用下面两个函数查找组名或组ID,它们定义在POSIX.1里:


  1. #include <grp.h>

  2. struct group *getgrgid(gid_t gid);

  3. struct group *getgrnam(const char *name);

  4. 两者成功都返回指针,否则返回NULL。

和密码文件函数一样,这两个函数通常都返回静态变量的指针,每次调用时都被覆写。


如果我们要查找整个组文件,我们需要一些额外函数。以下三个函数与它们相对的密码文件函数相似:



  1. #include <grp.h>

  2. struct group *getgrent(void);

  3. 成功返回指针,失败或文件尾返回NULL。

  4. void setgrent(void);

  5. void endgrent(void);

这三个函数不是基本POSIX.1标准的一部分,而是SUS的XSI扩展里定义的。所有UNIX系统都提供了它们。


setgrent函数打开组文件,哪果它还没有被打开的话。getgrent函数从组文件中读取下一个项,首先打开这个文件,如果它还没打开的话。endgrent函数关闭这个组文件。

阅读(574) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~