Here are detailed descriptions of the functions for reading the user and group IDs of a process, both real and effective. To use these facilities, you must include the header files sys/types.h and unistd.h.
This is an integer data type used to represent user IDs. In the GNU C Library, this is an alias for
unsigned int
.
This is an integer data type used to represent group IDs. In the GNU C Library, this is an alias for
unsigned int
.
The
getegid
function returns the effective group ID of the process.
The
getgroups
function is used to inquire about the supplementary group IDs of the process. Up to count of these group IDs are stored in the array groups; the return value from the function is the number of group IDs actually stored. If count is smaller than the total number of supplementary group IDs, thengetgroups
returns a value of-1
anderrno
is set toEINVAL
.If count is zero, then
getgroups
just returns the total number of supplementary group IDs. On systems that do not support supplementary groups, this will always be zero.Here's how to use
getgroups
to read all the supplementary group IDs:gid_t * read_all_groups (void) { int ngroups = getgroups (0, NULL); gid_t *groups = (gid_t *) xmalloc (ngroups * sizeof (gid_t)); int val = getgroups (ngroups, groups); if (val < 0) { free (groups); return NULL; } return groups; }