Originální popis anglicky:
getgroups, setgroups - get/set list of supplementary group IDs
Návod, kniha: Linux Programmer's Manual
#include <sys/types.h>
#include <unistd.h>
int getgroups(int size, gid_t list[]);
#include <grp.h>
int setgroups(size_t size, const gid_t
*list);
- getgroups
- Up to size supplementary group IDs (of the calling
process) are returned in list. It is unspecified whether the
effective group ID of the calling process is included in the returned
list. (Thus, an application should also call getegid(2) and add or
remove the resulting value.) If size is zero, list is not
modified, but the total number of supplementary group IDs for the process
is returned.
- setgroups
- Sets the supplementary group IDs for the process.
Appropriate privileges (Linux: the CAP_SETGID capability) are
required.
- 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.
- 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.
- EPERM
- The calling process has insufficient privilege to call
setgroups.
A process can have up to at least NGROUPS_MAX supplementary group IDs in
addition to the effective group ID. The set of supplementary group IDs is
inherited from the parent process and may be changed using
setgroups.
The maximum number of supplementary group IDs can be found using
sysconf(3):
long ngroups_max;
ngroups_max = sysconf(_SC_NGROUPS_MAX);
The maximal return value of
getgroups cannot be larger than one more than
the value obtained this way.
The prototype for
setgroups is only available if
_BSD_SOURCE is
defined (either explicitly, or implicitly, by not defining _POSIX_SOURCE or
compiling with the -ansi flag).
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.
getgid(2),
setgid(2),
initgroups(3),
capabilities(7)