getgroups, setgroups - get/set list of supplementary group
int getgroups(int size, gid_t list);
int setgroups(size_t size, const gid_t *list);
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.
Sets the supplementary groups for the process.
Only the super-user may use this function.
On success, the number of supplementary group IDs
is returned. On error, -1 is returned, and errno
is set appropriately.
On success, zero is returned. On error, -1 is
returned, and errno is set appropriately.
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
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
initgroups(3), getgid(2), setgid(2)