GETGROUPS(2)                    System Calls                    GETGROUPS(2)
NAME
       getgroups, setgroups - get or set supplementary group access list IDs
SYNOPSIS
       #include <unistd.h>       
int getgroups(
int gidsetsize, 
gid_t *grouplist);       
int setgroups(
int ngroups, 
const gid_t *grouplist);
DESCRIPTION
       The 
getgroups() function gets the current supplemental group access
       list of the calling process and stores the result in the array of
       group IDs specified by 
grouplist. This array has 
gidsetsize entries
       and must be large enough to contain the entire list. This list cannot
       be larger than 
NGROUPS_UMAX. If 
gidsetsize equals 0, 
getgroups() will
       return the number of groups to which the calling process belongs
       without modifying the array pointed to by 
grouplist.
       The 
setgroups() function sets the supplementary group access list of
       the calling process from the array of group IDs specified by       
grouplist. The number of entries is specified by 
ngroups and can not
       be greater than 
NGROUPS_MAX.
RETURN VALUES
       Upon successful completion, 
getgroups() returns the number of
       supplementary group IDs set for the calling process and 
setgroups()       returns 
0. Otherwise, 
-1 is returned and 
errno is set to indicate the
       error.
ERRORS
       The 
getgroups() and 
setgroups() functions will fail if:       
EFAULT                 A referenced part of the array pointed to by 
grouplist is
                 an illegal address.
       The 
getgroups() function will fail if:       
EINVAL                 The value of 
gidsetsize is non-zero and less than the
                 number of supplementary group IDs set for the calling
                 process.
       The 
setgroups() function will fail if:       
EINVAL                 The value of 
ngroups is greater than {
NGROUPS_MAX}.       
EPERM                 The {
PRIV_PROC_SETID} privilege is not asserted in the
                 effective set of the calling process.
USAGE
       Use of the 
setgroups() function requires the {
PRIV_PROC_SETID}
       privilege.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+--------------------------+
       |  ATTRIBUTE TYPE    |     ATTRIBUTE VALUE      |
       +--------------------+--------------------------+
       |Interface Stability | 
getgroups() is Standard. |
       +--------------------+--------------------------+
       |MT-Level            | Async-Signal-Safe        |
       +--------------------+--------------------------+
SEE ALSO
       groups(1), 
chown(2), 
getuid(2), 
setuid(2), 
getgrnam(3C),       
initgroups(3C), 
attributes(7), 
privileges(7), 
standards(7)                              September 8, 2006                 GETGROUPS(2)