getgroups()函数:获取组代码函数

函数说明:getgroup() 用来取得目前用户所属的组代码. 参数size 为list() 所能容纳的gid_t 数目. 如果参数size 值为零, 此函数仅会返回用户所属的组数。

#include <unistd.h>    
#include <sys/types.h>

int getgroups(int size, gid_t list[]);

返回值:返回组识别码, 如有错误则返回-1.

错误代码:
EFAULT:参数list 数组地址不合法.
EINVAL:参数size 值不足以容纳所有的组.

#include <unistd.h>
#include <sys/types.h>
main()
{
    gid_t list[500];
    int x, i;
    x = getgroups(0, list);
    getgroups(x, list);
    for(i = 0; i < x; i++)
        printf("%d:%d\n", i, list[i]);
}

相关函数: initgroups, setgroup, getgid, setgid

getgroups函数是一个POSIX标准定义的函数,用于获取当前进程所属的附加(supplementary group)列表。 函数原型如下: ```c #include <unistd.h> int getgroups(int size, gid_t grouplist[]); ``` 函数参数解释: - `size`:用于指定传入和传出的附加列表的大小。通常可以将其设置为当前附加的数量加1,以确保足够的空间。 - `grouplist`:一个数,用于存储获取到的附加ID。 函数返回值: - 若成功,返回获取到的附加的数量(不包括主要)。 - 若失败,返回-1,并设置errno表示错误原因。 以下是一个示例代码,演示了如何使用getgroups函数获取当前进程的附加列表: ```c #include <stdio.h> #include <unistd.h> #define MAX_GROUPS 16 int main() { gid_t grouplist[MAX_GROUPS]; int num_groups, i; num_groups = getgroups(MAX_GROUPS, grouplist); if (num_groups == -1) { perror("getgroups"); return 1; } printf("Number of supplementary groups: %d\n", num_groups); printf("Supplementary group IDs: "); for (i = 0; i < num_groups; i++) { printf("%d ", grouplist[i]); } printf("\n"); return 0; } ``` 在上述示例中,我们首先定义了一个大小为`MAX_GROUPS`的数来存储附加的ID。然后,调用`getgroups`函数获取当前进程的附加列表,并将结果存储在数中。最后,我们打印出附加的数量和ID。 请注意,为了正常使用`getgroups`函数,需要在编译时链接libcap库,使用以下命令编译代码: ``` gcc example.c -o example -lcap ``` 此外,需要注意的是,附加列表是针对进程而言的,每个进程都有自己的附加列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>