setgid , setrgid , setegid , setregid 或 setgidx 子例程

用途

设置进程组标识。

标准 C 库 (libc.a)

语法

#include <unistd.h>
int setgid (GID)
gid_t  GID;
int setrgid (RGID)
gid_t  RGID;
int setegid (EGID)
gid_t  EGID;
int setregid (RGID, EGID)
gid_t RGID;
gid_t EGID;
#include <unistd.h>
#include <sys/id.h>

int setgidx ( which, GID )
int which;
gid_t GID;

描述

setgidsetrgidsetegidsetregidsetgidx 子例程设置调用进程的进程组标识。 支持以下语义:

描述
setgid 如果进程的有效用户标识是 root 用户,那么该进程的实际,有效和已保存的组标识将设置为 GID 参数的值。 否则,如果 GID 参数等于当前实际组标识或已保存的组标识或其一个补充组标识,那么将重置进程有效组标识。 不更改调用进程的补充组标识。
setegid 如果满足下列其中一个条件,那么将重置进程有效组标识:
  • EGID 参数等于当前实组标识或已保存的组标识。
  • EGID 参数等于它的一个补充组标识。
  • 进程的有效用户标识是 root 用户。
setrgid 始终返回 EPERM 错误代码。
setregid RGIDEGID 参数可以具有下列其中一个关系:
RGID ! = EGID
如果 EGID 参数等于进程的实际组标识或保存的组标识,那么进程有效组标识将设置为 EGID 参数。 否则,将返回 EPERM 错误代码。
RGID == EGID
如果进程的有效用户标识是 root 用户,那么进程的实际有效组标识将设置为 EGID 参数。 如果 EGID 参数等于进程的实际组标识或保存的组标识,那么进程有效组标识将设置为 EGID。 否则,将返回 EPERM 错误代码。
setgidx 哪些 参数可以具有下列其中一个值:
标识有效
GID 必须是实际或保存的 GID 或并发组集中的某个值。 当前进程的有效组标识将设置为 GID
ID_生效 | ID_REAL
调用者必须具有相应的特权。 当前进程的实际有效组标识将设置为 GID
ID_生效 | ID_REAL | ID_SAVED
调用者必须具有相应的特权。 当前进程的真实,有效和已保存的组标识将设置为 GID。

setegidsetrgidsetregidsetgidx 子例程是线程安全的。

操作系统不支持 setuid (setuid , setruid , seteuid , setreuid 或 setuidx 子例程) 或 setgid shell 脚本。

这些子例程是基本操作系统 (BOS) 运行时的一部分。

参数

描述
GID 指定要设置的组标识的值。
rgid 指定要设置的实际组标识的值。
egid 指定要设置的有效组标识的值。
which 指定要设置的组标识值。

返回值

描述
重大安全事件数量 指示子例程已成功。
-1 指示子例程失败。 设置了 errno 全局变量以指示错误。

错误代码

如果 setgid setegidsetgidx 子例程失败,那么将返回以下一项或多项:

描述
EPERM 指示进程没有相应的特权,并且 GIDEGID 参数不等于进程的实际组标识或已保存的组标识。
EINVAL 指示 GIDEGID哪一个 参数的值无效。