Получить список групп, в которые входит пользователь
#include <unistd.h>int getgrouplist( const char *name,gid_t basegid,gid_t *groups,int *ngroups );
libc
Функция getgrouplist() считывает файл групп и определяет список доступных групп для пользователя name.
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <limits.h>int main(){int ngroups, i;gid_t groups[NGROUPS_MAX];ngroups = NGROUPS_MAX;if ( getgrouplist( getlogin(), getegid(), groups, &ngroups ) == -1 ){printf( "Groups array is too small: %d\n", ngroups );}printf( "%s belongs to these groups: %d", getlogin(), getegid() );for ( i = 0; i < ngroups; i++ ){printf( ", %d", groups[i] );}printf( "\n" );return (EXIT_SUCCESS);}
Unix
Функция getgrouplist() использует процедуры на основе getgrent(). Если вызываемая программа использует какие-либо из этих процедур, структура struct group будет перезаписана в вызове getgrouplist().
Это процедура BSD, разработанная для системы, в которой эффективный идентификатор группы помещается в список дополнительных групп. Neutrino этого не делает, поэтому игнорирует аргумент basegid.
Предыдущий раздел: Описание API системной библиотеки