Next: Setting User ID, Previous: How Change Persona, Up: Users and Groups
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 library, this is an alias for
unsigned int.
This is an integer data type used to represent group IDs. In the GNU library, this is an alias for
unsigned int.
The
getegidfunction returns the effective group ID of the process.
The
getgroupsfunction 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, thengetgroupsreturns a value of-1anderrnois set toEINVAL.If count is zero, then
getgroupsjust 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
getgroupsto 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; }