C 如何查看多个用户组?
如何查看多个用户组 我指的是C语言的实现C 如何查看多个用户组?,c,linux,C,Linux,如何查看多个用户组 我指的是C语言的实现 我想使用该功能,但我想让它自动计算组数。这是一个现成的程序,它似乎在我的macOS 10.14.1系统上运行,似乎已经落后于时代了: #include <stdio.h> #include <unistd.h> int main(void) { int res = 0; int ng = 100; int gs[ng]; res = getgrouplist("hacksaw", 20, gs, &ng)
我想使用该功能,但我想让它自动计算组数。这是一个现成的程序,它似乎在我的macOS 10.14.1系统上运行,似乎已经落后于时代了:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int res = 0;
int ng = 100;
int gs[ng];
res = getgrouplist("hacksaw", 20, gs, &ng);
printf("num_grps: %d\nres: %d\n", ng, res);
}
#包括
#包括
内部主(空)
{
int res=0;
int ng=100;
int-gs[ng];
res=getgrouplist(“hacksaw”、20、gs和ng);
printf(“数量GRP:%d\nres:%d\n”,ng,res);
}
下面是一个适用于Ubuntu 16.04的版本:
#include <stdio.h>
#include <grp.h>
int main(void)
{
int res = 0;
int ng = 100;
gid_t gs[ng];
res = getgrouplist("hacksaw", 20, gs, &ng);
printf("num_grps: %d\nres: %d\n", ng, res);
}
#包括
#包括
内部主(空)
{
int res=0;
int ng=100;
gid_t gs[ng];
res=getgrouplist(“hacksaw”、20、gs和ng);
printf(“数量GRP:%d\nres:%d\n”,ng,res);
}
选择100码是为了提供足够的空间。您的问题不清楚。您应该准确地说明您想要完成的任务,例如,您所说的“多个用户组”和“自动获取组数”是什么意思。请参阅。
getgrouplist()
函数获取特定用户(由UID标识)所属组的列表。内核不会(不能?)为您分配内存;你必须预先确定你愿意处理多少团体。这不是一个严重的内存使用问题。即使组ID每个为8字节(它们很可能每个为4字节),即使您分配了多达128个组(这比大多数系统可能拥有的单个用户组更多),您也在谈论1kib内存。分配它,继续生活。但是“查看多个组”是不明确的。请注意,您应该提供一个gid\u t
数组,而不是int
。我所指的原型是“int-getgrouplist(const-char*name,int-basegid,int*groups,int*ngroups)”;如果使用gif\t,Clang会抱怨。(我在macOS上)嗯……好吧——有趣!我现在在问题中添加了引用(),它规定了intgetgrouplist(const char*user、gid_t group、gid_t*groups、int*ngroups)代码>。你似乎有不同的消息来源。对于任何需要在系统之间移动代码的人来说,这都是一个可移植性问题。该函数是一个Linux和BSD扩展AFAIK。在macOS(基于BSD)上,原型是int getgrouplist(const char*name、int basegid、int*groups、int*ngroups)代码>![…继续…][…继续…]标准有其用途。它不在POSIX中。如果是,它将使用gid\u t
。它可能永远不会出现在POSIX中,名称为getgrouplist()
,因为存在不兼容的先例(出于同样的原因,您不会看到标准的qsort\r()
)。如果它是标准化的,它将使用不同的名称。实际上,BSD的问题是,他们在添加功能方面走在了时代的前列,然后他们周围的世界发生了变化,他们的界面变得过时,但由于向后兼容的原因,无法更改。这类事情是很常见的问题。