名称

getgrent,setgrent,endgrent-获取组文件条目

错误说明

EAGAIN
该服务暂时不可用;稍后再试。对于glibc中的NSS后端,这表示与后端通信时出现临时错误。错误可能会自行纠正,建议稍后重试。
EINTR
捕获到信号;参见signal(7)。
EIO
I / O错误。
EMFILE
已达到打开文件描述符数量的每个进程限制。
ENFILE
已达到系统范围内打开文件总数的限制。
ENOENT找不到所需的输入文件。对于glibc中的NSS后端,这表明后端配置不正确。
ENOMEM
内存不足,无法分配组结构。
ERANGE
提供的缓冲区空间不足。

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.3BSD。

说明

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 - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

语法

#include <sys/types.h>
#include <grp.h>

struct group *getgrent(void);

void setgrent(void);

void endgrent(void);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

setgrent():

_XOPEN_SOURCE>= 500 || / * Glibc自2.19开始:* / -_DEFAULT_SOURCE || / * Glibc版本

getgrent(),endgrent():

从glibc 2.22开始: _XOPEN_SOURCE>= 500 _DEFAULT_SOURCE Glibc 2.21和更早版本 _XOPEN_SOURCE>= 500 || / *自glibc 2.12起:* / _POSIX_C_SOURCE>= 200809L || / * Glibc版本

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

返回值

getgrent()函数返回一个指向组结构的指针,如果没有更多条目或发生错误,则返回NULL。

错误时,可能会设置errno。如果要在通话后检查errno,则应在通话前将其设置为零。

返回值可能指向静态区域,并且可能随后被getgrent(),getgrgid(3)或getgrnam(3)调用而覆盖。 (不要将返回的指针传递给free(3)。)

另外参见

fgetgrent(3),getgrent_r(3),getgrgid(3),getgrnam(3),getgrouplist(3),putgrent(3),group(5)

文件

/etc/group
本地组数据库文件

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
getgrent()Thread safetyMT-Unsafe race:grent
race:grentbuf locale
setgrent(),endgrent()Thread safetyMT-Unsafe race:grent locale

在上表中,race:grent中的grent表示如果在程序的不同线程中并行使用setgrent(),getgrent()或endgrent()函数中的任何一个,则可能发生数据争用。

日期:2019-08-20 18:01:16 来源:oir作者:oir