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
.
uid_t
getuid (void)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The getuid
function returns the real user ID of the process.
gid_t
getgid (void)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The getgid
function returns the real group ID of the process.
uid_t
geteuid (void)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The geteuid
function returns the effective user ID of the process.
gid_t
getegid (void)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The getegid
function returns the effective group ID of the process.
int
getgroups (int count, gid_t *groups)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
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, then getgroups
returns a value of -1
and errno
is set to EINVAL
.
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; }