NAME

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


SYNOPSIS

     #include <unistd.h>

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


     #define __USE_BSD
     #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.


BUGS

     The __USE_BSD flag probably shouldn't be required  for  set-
     groups.


SEE ALSO

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