NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |FILES |ATTRIBUTES |VERSIONS |STANDARDS |HISTORY |SEE ALSO |COLOPHON | |
getgrnam(3) Library Functions Manualgetgrnam(3)getgrnam, getgrnam_r, getgrgid, getgrgid_r - get group file entry
Standard C library (libc,-lc)
#include <sys/types.h>#include <grp.h>struct group *getgrnam(const char *name);struct group *getgrgid(gid_tgid);int getgrnam_r(size_t size;const char *restrictname, struct group *restrictgrp,charbuf[restrictsize], size_tsize,struct group **restrictresult);int getgrgid_r(size_t size;gid_tgid, struct group *restrictgrp,charbuf[restrictsize], size_tsize,struct group **restrictresult); Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):getgrnam_r(),getgrgid_r(): _POSIX_C_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
Thegetgrnam() function returns a pointer to a structure containing the broken-out fields of the record in the group database (e.g., the local group file/etc/group, NIS, and LDAP) that matches the group namename. Thegetgrgid() function returns a pointer to a structure containing the broken-out fields of the record in the group database that matches the group IDgid. Thegroup structure is defined in<grp.h> as follows: 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 */ }; For more information about the fields of this structure, seegroup(5). Thegetgrnam_r() andgetgrgid_r() functions obtain the same information asgetgrnam() andgetgrgid(), but store the retrievedgroup structure in the space pointed to bygrp. The string fields pointed to by the members of thegroup structure are stored in the bufferbuf of sizesize. A pointer to the result (in case of success) or NULL (in case no entry was found or an error occurred) is stored in*result. The call sysconf(_SC_GETGR_R_SIZE_MAX) returns either -1, without changingerrno, or an initial suggested size forbuf. (If this size is too small, the call fails withERANGE, in which case the caller can retry with a larger buffer.)Thegetgrnam() andgetgrgid() functions return a pointer to agroup structure, or NULL if the matching entry is not found or an error occurs. If an error occurs,errno is set to indicate the error. If one wants to checkerrno 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 togetgrent(3),getgrgid(), orgetgrnam(). (Do not pass the returned pointer tofree(3).) On success,getgrnam_r() andgetgrgid_r() return zero, and set*result togrp. If no matching group record was found, these functions return 0 and store NULL in*result. In case of error, an error number is returned, and NULL is stored in*result.
0orENOENTorESRCHorEBADForEPERMor ... The givenname orgid was not found.EINTRA signal was caught; seesignal(7).EIOI/O error.EMFILEThe per-process limit on the number of open file descriptors has been reached.ENFILEThe system-wide limit on the total number of open files has been reached.ENOMEMInsufficient memory to allocategroup structure.ERANGEInsufficient buffer space supplied.
/etc/group local group database file
For an explanation of the terms used in this section, seeattributes(7). ┌───────────────┬───────────────┬────────────────────────────────┐ │Interface│Attribute│Value│ ├───────────────┼───────────────┼────────────────────────────────┤ │getgrnam() │ Thread safety │ MT-Unsafe race:grnam locale │ ├───────────────┼───────────────┼────────────────────────────────┤ │getgrgid() │ Thread safety │ MT-Unsafe race:grgid locale │ ├───────────────┼───────────────┼────────────────────────────────┤ │getgrnam_r(), │ Thread safety │ MT-Safe locale │ │getgrgid_r() │ │ │ └───────────────┴───────────────┴────────────────────────────────┘
The formulation given above under "RETURN VALUE" is from POSIX.1. It does not call "not found" an error, hence does not specify what valueerrno might have in this situation. But that makes it impossible to recognize errors. One might argue that according to POSIXerrno should be left unchanged if an entry is not found. Experiments on various UNIX-like systems show that lots of different values occur in this situation: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM, and probably others.
POSIX.1-2008.
POSIX.1-2001, SVr4, 4.3BSD.
endgrent(3),fgetgrent(3),getgrent(3),getpwnam(3),setgrent(3),group(5)
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-06-28getgrnam(3)Pages that refer to this page:getent(1), fgetgrent(3), getgrent(3), getgrent_r(3), getpwnam(3), getspnam(3), id_t(3type), group(5), nscd(8)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |