Node:Reading Persona, 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.
| uid_t | Data Type | 
This is an integer data type used to represent user IDs.  In the GNU
library, this is an alias for unsigned int. 
 | 
| gid_t | Data Type | 
This is an integer data type used to represent group IDs.  In the GNU
library, this is an alias for unsigned int. 
 | 
| uid_t getuid (void) | Function | 
The getuid function returns the real user ID of the process. 
 | 
| gid_t getgid (void) | Function | 
The getgid function returns the real group ID of the process. 
 | 
| uid_t geteuid (void) | Function | 
The geteuid function returns the effective user ID of the process. 
 | 
| gid_t getegid (void) | Function | 
The getegid function returns the effective group ID of the process. 
 | 
| int getgroups (int count, gid_t *groups) | Function | 
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  Here's how to use  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;
}
 |