Developer's Daily | Unix by Example |
main | java | perl | unix | dev directory | web log |
getgroups, setgroups ? get/set list of supplementary group IDs |
#include <unistd.h> int getgroups(int size, gid_t list[]); #define __USE_BSD int setgroups(size_t size, const gid_t *list); |
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. |
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. |
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. |
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 __USE_BSD flag probably shouldn’t be required for setgroups. |
initgroups(3), getgid(2), setgid(2) |