Функция
getpwnam()
возвращает указатель на структуру, содержащую поля строки из файла
/etc/passwd
для записи, совпадающей с именем пользователя
name.
Функция
getpwuid()
возвращает указатель на структуру, содержащую поля строки из файла
/etc/passwd
для записи, совпадающей с идентификатором пользователя
uid.
Структура
passwd
определена в файле
<pwd.h>
следующим образом:
struct passwd {
char *pw_name; /* имя пользователя */
char *pw_passwd; /* пароль пользователя */
uid_t pw_uid; /* id пользователя */
gid_t pw_gid; /* id группы */
char *pw_gecos; /* настоящее имя */
char *pw_dir; /* домашний каталог */
char *pw_shell; /* программа-оболочка */
};
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функции
getpwnam()
и
getpwuid()
возвращают указатель на структуру passwd или NULL, если искомая запись не найдена или
произошла ошибка.
НАЙДЕННЫЕ ОШИБКИ
0 или ENOENT или ESRCH или EBADF или EPERM или ...
Заданное
name
или
gid
не найдены.
ENOMEM
Недостаточно памяти для размещения структуры passwd.
EIO
Ошибка ввода/вывода.
EINTR
Был пойман сигнал.
EMFILE
В вызывающем процессе достигнуто максимальное число (OPEN_MAX) файлов.
ENFILE
В системе уже достигнуто максимальное число файлов.
ФАЙЛЫ
/etc/passwd
(файл базы данных паролей).
СООТВЕТСТВИЕ СТАНДАРТАМ
SVID 3, POSIX, BSD 4.3
ЗАМЕЧАНИЯ
Выводы, указанные выше в разделе "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ", взяты из POSIX.1-2001.
При этом никогда не вызывается ошибка "not found/не найдено",
так как не определено никакое значение переменной
errno
в этой ситуации. Но это приводит к тому, что ошибка может быть не распознана.
Поэтому считается, что в соответствии с POSIX
errno
должно оставаться неизменным, если элемент не был найден. Опыты с разными
Unix-подобными системами показывают, что в этой ситуации возвращаются абсолютно
разные значения: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM и другие.