getgrent函数用法详解
getgrent函数简介
- 头文件包含
#include <sys/types.h>
#include <grp.h>
- 函数定义
struct group *getgrent(void);
void setgrent(void);
void endgrent(void);
getgrent函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘getgrent’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <sys/types.h>
#include <grp.h>
getgrent函数详细描述
getgrent ()函数返回一个指向结构的指针,该结构包含组数据库中记录的分段字段(例如,本地组文件/etc/group NIS和LDAP)。第一次调用getgrent ()时,它返回第一个条目;此后,它返回连续的条目。
setgrent ()函数倒回组数据库的开头,以允许重复扫描。
endgrent ()函数用于在执行所有处理后关闭组数据库。
struct group {
char *gr_name; /* group name */
char *gr_passwd; /* group password */
gid_t gr_gid; /* group ID */
char **gr_mem; /* NULL-terminated array of pointers
to names of group members */
};
有关此结构的字段的更多信息,请参见group (5)
getgrent函数返回值
getgrent ()函数返回指向group结构的指针,如果没有更多条目或发生错误,则返回NULL。
出错时,可设置errno。如果想在调用后检查errno,应该在调用前将其设置为零。
返回值可能指向静态区域,并且可能被对getgrent ()、getgrgid (3)或getgrnam (3)的后续调用覆盖(不要将返回的指针传递给free (3))
getgrent函数错误码
- EAGAIN 服务暂时不可用;请稍后再试。对于glibc中的NSS后端,这表示与后端对话时出现临时错误。错误可能会自行纠正,建议稍后重试。
- EINTR 捕获了一个信号;参见signal (7)
- EIO I/O错误。
- EMFILE 已达到每个进程打开的文件描述符的数量限制。
- ENFILE 已达到系统范围内打开文件总数的限制。
- ENOENT 找不到必要的输入文件。对于glibc中的NSS后端,这表明后端配置不正确。
- ENOMEM 内存不足,无法分配group结构。
- ERANGE 提供的缓冲区空间不足。
评论区