getgrouplist()

Получить список групп, в которые входит пользователь

Прототип:

#include <unistd.h>
int getgrouplist( const char *name,
gid_t basegid,
gid_t *groups,
int *ngroups );

Аргументы:

name
Имя пользователя.
groups
Указатель на массив, где функции могут хранить идентификаторы групп.
ngroups
Указатель на размер массива groups. Функция устанавливает это значение в соответствии с количеством найденных групп.

Библиотека:

libc

Описание:

Функция getgrouplist() считывает файл групп и определяет список доступных групп для пользователя name.

Возвращаемое значение:

0
Успешное завершение; функция заполняет массив групп и устанавливает *ngroups равным числу найденных групп.
-1
Массив groups слишком мал для хранения всех групп пользователя. Функция заполняет массив групп теми группами, что уместятся в доступный объем памяти.

Примеры:

#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);
}

Файлы:

/etc/group
Список членства в группах.

Классификация:

Unix

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Функция getgrouplist() использует процедуры на основе getgrent(). Если вызываемая программа использует какие-либо из этих процедур, структура struct group будет перезаписана в вызове getgrouplist().

Это процедура BSD, разработанная для системы, в которой эффективный идентификатор группы помещается в список дополнительных групп. Neutrino этого не делает, поэтому игнорирует аргумент basegid.

Тематические ссылки:

initgroups(), setgroups()




Предыдущий раздел: Описание API системной библиотеки