getgroups, setgroups - get/set list of supplementary group
       IDs


SYNOPSIS

       #include <sys/types.h>
       #include <unistd.h>

       int getgroups(int size, gid_t list[]);


       #define _BSD_SOURCE
       #include <grp.h>

       int setgroups(size_t size, const gid_t *list);


DESCRIPTION

       getgroups
              Up to size supplementary  groups  are  returned  in
              list.   If  size is zero, list is not modified, but
              the total number of supplementary  groups  for  the
              process is returned.

       setgroups
              Sets  the  supplementary  groups  for  the process.
              Only the super-user may use this function.


RETURN VALUE

       getgroups
              On success, the number of supplementary  group  IDs
              is  returned.   On error, -1 is returned, and errno
              is set appropriately.

       setgroups
              On success, zero is  returned.   On  error,  -1  is
              returned, and errno is set appropriately.


ERRORS

       EFAULT list has an invalid address.

       EPERM  For setgroups, the user is not the super-user.

       EINVAL For setgroups, size is greater than NGROUPS (32 for
              Linux 2.0.32).  For getgroups, size  is  less  than
              the  number  of supplementary group IDs, but is not
              zero.


CONFORMING TO

       SVr4, SVID (issue 4 only; these calls were not present  in
       SVr3),  X/OPEN,  4.3BSD.   The  getgroups  function  is in
       POSIX.1.  Since setgroups requires privilege,  it  is  not
       covered by POSIX.1.

       The  _BSD_SOURCE  flag  probably shouldn't be required for
       setgroups.


SEE ALSO

       initgroups(3), getgid(2), setgid(2)