setgid - set-group-ID
int setgid(gid_t gid);
If the process has appropriate privileges, setgid() shall set the real group ID, effective group ID, and the saved set-group-ID of the calling process to gid.
If the process does not have appropriate privileges, but gid is equal to the real group ID or the saved set-group-ID, setgid() shall set the effective group ID to gid; the real group ID and saved set-group-ID shall remain unchanged.
The setgid() function shall not affect the supplementary group list in any way.
Any supplementary group IDs of the calling process shall remain unchanged.
Upon successful completion, 0 is returned. Otherwise, -1 shall be returned and errno set to indicate the error.
The setgid() function shall fail if:
- The value of the gid argument is invalid and is not supported by the implementation.
- The process does not have appropriate privileges and gid does not match the real group ID or the saved set-group-ID.
Refer to the RATIONALE section in setuid() .
exec() , getegid() , geteuid() , getgid() , getuid() , setegid() , seteuid() , setregid() , setreuid() , setuid() , the Base Definitions volume of IEEE Std 1003.1-2001, <sys/types.h>, <unistd.h>
First released in Issue 1. Derived from Issue 1 of the SVID.
In the SYNOPSIS, the optional include of the <sys/types.h> header is removed.
The following new requirements on POSIX implementations derive from alignment with the Single UNIX Specification:
The requirement to include <sys/types.h> has been removed. Although <sys/types.h> was required for conforming implementations of previous POSIX specifications, it was not required for UNIX applications.
Functionality associated with _POSIX_SAVED_IDS is now mandated. This is a FIPS requirement.
The following changes were made to align with the IEEE P1003.1a draft standard:
The effects of setgid() in processes without appropriate privileges are changed.
A requirement that the supplementary group list is not affected is added.