getgroups() - Unix、Linux 系统调用
Tutorials Point


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

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

getgroups() - Unix、Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

getgroups、setgroups - 获取/设置补充组 ID 列表

语法

#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()
 最多 size 个调用进程的补充组 ID 将返回到 list 中。是否包含调用进程的有效组 ID 未指定。(因此,应用程序还应该调用 getegid(2) 并添加或删除结果值。)如果 size 为零,则 list 不修改,但返回进程的补充组 ID 的总数。
setgroups()
 设置进程的补充组 ID。需要适当的权限(Linux:CAP_SETGID 能力)。

返回值

标签描述
getgroups()
 成功时,返回补充组 ID 的数量。失败时,返回 -1,并将 errno 设置为适当的值。
setgroups()
 成功时,返回零。失败时,返回 -1,并将 errno 设置为适当的值。

错误

标签描述
EFAULT list 的地址无效。
EINVAL 对于 setgroups(),size 大于 NGROUPS(对于 Linux 2.0.32 为 32)。对于 getgroups(),size 小于补充组 ID 的数量,但不为零。
EPERM 调用进程没有足够的权限来调用 setgroups()。

备注

除了有效组 ID 之外,一个进程最多可以有 NGROUPS_MAX 个补充组 ID。补充组 ID 集从父进程继承,可以使用 setgroups() 更改。可以使用 sysconf(3) 找到补充组 ID 的最大数量。
    long ngroups_max;
    ngroups_max = sysconf(_SC_NGROUPS_MAX);
getgroups() 的最大返回值不能大于通过这种方式获得的值加 1。

只有在定义了 _BSD_SOURCE 时,setgroups() 的原型才可用。

符合标准

SVr4、4.3BSD。getgroups() 函数在 POSIX.1-2001 中。由于 setgroups() 需要权限,因此 POSIX.1-2001 未涵盖它。

参见



previous next Printer Friendly

广告


  

广告



广告