setresuid() - Unix,Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

setresuid() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

setresuid、setresgid - 设置真实、有效和已保存的用户或组 ID

语法

#define _GNU_SOURCE
#include <unistd.h>

int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

描述

setresuid() 设置当前进程的真实用户 ID、有效用户 ID 和已保存的 set-user-ID。

非特权用户进程可以将真实 UID、有效 UID 和已保存的 set-user-ID 分别更改为以下值之一:当前真实 UID、当前有效 UID 或当前已保存的 set-user-ID。

特权进程(在 Linux 上,拥有 CAP_SETUID 功能的进程)可以将真实 UID、有效 UID 和已保存的 set-user-ID 设置为任意值。

如果其中一个参数等于 -1,则相应的值不会更改。

无论对真实 UID、有效 UID 和已保存的 set-user-ID 进行哪些更改,文件系统 UID 始终设置为与(可能新的)有效 UID 相同的值。

完全类似地,setresgid() 设置当前进程的真实 GID、有效 GID 和已保存的 set-group-ID(并且始终将文件系统 GID 修改为与有效 GID 相同),对非特权进程有相同的限制。

返回值

成功时,返回零。发生错误时,返回 -1,并且 errno 被相应地设置。

错误

标签描述
EAGAIN uid 与当前 UID 不匹配,并且此调用会使该用户 ID 超过其 NPROC rlimit。
EPERM 调用进程没有特权(没有 CAP_SETUID 功能)并且尝试将 ID 更改为不允许的值。

符合标准

这些调用是非标准的;它们也出现在 HP-UX 和一些 BSD 上。

历史

此系统调用最初是在 HP-UX 中引入的。它自 Linux 2.1.44 起在 Linux 上可用。如今它也存在于 FreeBSD 中(用于模拟 Linux 二进制文件)。

备注

在 HP-UX 和 FreeBSD 下,原型位于 <unistd.h> 中。在 Linux 下,原型由 glibc 自版本 2.3.2 起提供,前提是定义了 _GNU_SOURCE。

参见



previous next Printer Friendly

广告


  

广告



广告