getgroups.c
来自「MC Linux/Unix 终端下文件管理器」· C语言 代码 · 共 67 行
C
67 行
/* this tests whether getgroups actually returns lists of integers rather than gid_t. The test only works if the user running the test is in at least 1 group The test is designed to check for those broken OSes that define getgroups() as returning an array of gid_t but actually return a array of ints! Ultrix is one culprit */#if defined(HAVE_UNISTD_H)#include <unistd.h>#endif#include <sys/types.h>#include <stdio.h>#include <unistd.h>#include <grp.h>main(){ int i; int *igroups; char *cgroups; int grp = 0; int ngroups = getgroups(0,&grp); if (sizeof(gid_t) == sizeof(int)) { fprintf(stderr,"gid_t and int are the same size\n"); exit(1); } if (ngroups <= 0) ngroups = 32; igroups = (int *)malloc(sizeof(int)*ngroups); for (i=0;i<ngroups;i++) igroups[i] = 0x42424242; ngroups = getgroups(ngroups,(gid_t *)igroups); if (igroups[0] == 0x42424242) ngroups = 0; if (ngroups == 0) { printf("WARNING: can't determine getgroups return type\n"); exit(1); } cgroups = (char *)igroups; if (ngroups == 1 && cgroups[2] == 0x42 && cgroups[3] == 0x42) { fprintf(stderr,"getgroups returns gid_t\n"); exit(1); } for (i=0;i<ngroups;i++) { if (igroups[i] == 0x42424242) { fprintf(stderr,"getgroups returns gid_t\n"); exit(1); } } exit(0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?