.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified Sat Jul 24 19:29:54 1993 by Rik Faith (faith@cs.unc.edu)
.TH GETGRENT 3  2010-10-21 "" "Linux Programmer's Manual"
.SH NAME
getgrent, setgrent, endgrent \- get group file entry
.SH SYNOPSIS
.nf
.B #include <sys/types.h>
.B #include <grp.h>
.sp
.B struct group *getgrent(void);
.sp
.B void setgrent(void);
.sp
.B void endgrent(void);
.fi
.sp
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
.sp
.PD 0
.ad l
.BR setgrent ():
.RS 4
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
_XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED ||
.br
/* Since glibc 2.12: */ _POSIX_C_SOURCE\ >=\ 200809L
.RE
.sp
.BR getgrent (),
.BR endgrent ():
.RS 4
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
_XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
.RE
.PD
.ad b
.SH DESCRIPTION
The
.BR getgrent ()
function returns a pointer to a structure containing
the broken-out fields of a record in the group database
(e.g., the local group file
.IR /etc/group ,
NIS, and LDAP).
The first time
.BR getgrent ()
is called,
it returns the first entry; thereafter, it returns successive entries.
.PP
The
.BR setgrent ()
function rewinds to the beginning
of the group database, to allow repeated scans.
.PP
The
.BR endgrent ()
function is used to close the group database
after all processing has been performed.
.PP
The \fIgroup\fP structure is defined in \fI<grp.h>\fP as follows:
.sp
.in +4n
.nf
struct group {
    char   *gr_name;       /* group name */
    char   *gr_passwd;     /* group password */
    gid_t   gr_gid;        /* group ID */
    char  **gr_mem;        /* group members */
};
.fi
.in
.PP
For more information about the fields of this structure, see
.BR group (5).
.SH "RETURN VALUE"
The
.BR getgrent ()
function returns a pointer to a
.I group
structure,
or NULL if there are no more entries or an error occurs.
.LP
Upon error,
.I errno
may be set.
If one wants to check
.I errno
after the call, it should be set to zero before the call.

The return value may point to a static area, and may be overwritten
by subsequent calls to
.BR getgrent (),
.BR getgrgid (3),
or
.BR getgrnam (3).
(Do not pass the returned pointer to
.BR free (3).)
.SH ERRORS
.TP
.B EINTR
A signal was caught.
.TP
.B EIO
I/O error.
.TP
.B EMFILE
The calling process already has too many open files.
.TP
.B ENFILE
Too many open files in the system.
.TP
.B ENOMEM
.\" not in POSIX
Insufficient memory to allocate
.I group
structure.
.TP
.B ERANGE
Insufficient buffer space supplied.
.SH FILES
.TP
.I /etc/group
local group database file
.SH "CONFORMING TO"
SVr4, 4.3BSD, POSIX.1-2001.
.SH "SEE ALSO"
.BR fgetgrent (3),
.BR getgrent_r (3),
.BR getgrgid (3),
.BR getgrnam (3),
.BR getgrouplist (3),
.BR putgrent (3),
.BR group (5)
