Provided by: manpages-ru-dev_4.26.0-1_all 

НАИМЕНОВАНИЕ
getpwent_r, fgetpwent_r - получает запись из файла паролей (реентерабельные версии)
БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)
ОБЗОР
#include <pwd.h>
int getpwent_r(struct passwd *restrict pwbuf,
char buf[restrict .buflen], size_t buflen,
struct passwd **restrict pwbufp);
int fgetpwent_r(FILE *restrict stream, struct passwd *restrict pwbuf,
char buf[restrict .buflen], size_t buflen,
struct passwd **restrict pwbufp);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
getpwent_r(),
начиная с glibc 2.19:
_DEFAULT_SOURCE
в glibc 2.19 и старее:
_BSD_SOURCE || _SVID_SOURCE
fgetpwent_r():
начиная с glibc 2.19:
_DEFAULT_SOURCE
glibc 2.19 и старее:
_SVID_SOURCE
ОПИСАНИЕ
Функции getpwent_r() и fgetpwent_r() являются реентерабельными версиями getpwent(3) и fgetpwent(3).
Первая читает следующую запись паролей из потока, инициализированного setpwent(3). Последняя читает
следующую запись паролей из потока stream.
Структура passwd определена в <pwd.h> таким образом:
struct passwd {
char *pw_name; /* имя пользователя */
char *pw_passwd; /* пароль пользователя */
uid_t pw_uid; /* идентификатор пользователя */
gid_t pw_gid; /* идентификатор группы */
char *pw_gecos; /* информация о пользователе */
char *pw_dir; /* домашний каталог */
char *pw_shell; /* программная оболочка */
};
Подробней о полях этой структуры смотрите в passwd(5).
Нереентерабельные версии возвращают указатель на статическое хранилище, в котором хранятся другие
указатели на имя пользователя, пароль, поле gecos, домашний каталог и оболочку. Реентерабельные функции,
описанные здесь, возвращают всю информацию в буферах, предоставленных вызывающим. Основным буфером
является pwbuf, в котором может храниться struct passwd. В дополнительном буфере buf размера buflen могут
храниться дополнительные строки. Результат этих функций, прочитанная из потока struct passwd, сохраняется
в предоставляемый буфер *pwbuf, и указатель на эту struct passwd возвращается в *pwbufp.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении эти функции возвращают 0 и *pwbufp указывает на struct passwd. При ошибке
возвращается значение ошибки и *pwbufp равен NULL.
ОШИБКИ
ENOENT Больше записей нет.
ERANGE Недостаточно места в буфере. Попробуйте ещё раз с большим буфером.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
┌───────────────┬──────────────────────┬────────────────────────────────────────────────────────────────┐
│ Интерфейс │ Атрибут │ Значение │
├───────────────┼──────────────────────┼────────────────────────────────────────────────────────────────┤
│ getpwent_r() │ Безвредность в нитях │ MT-Unsafe race:pwent locale │
├───────────────┼──────────────────────┼────────────────────────────────────────────────────────────────┤
│ fgetpwent_r() │ Безвредность в нитях │ MT-Safe │
└───────────────┴──────────────────────┴────────────────────────────────────────────────────────────────┘
В приведённой выше таблице pwent в race:pwent означает, что если в нескольких нитях программы
одновременно используются функции setpwent(), getpwent(), endpwent() или getpwent_r(), то может
возникнуть состязательность по данным.
ВЕРСИИ
Other systems use the prototype
struct passwd *
getpwent_r(struct passwd *pwd, char *buf, int buflen);
или, лучше,
int
getpwent_r(struct passwd *pwd, char *buf, int buflen,
FILE **pw_fp);
СТАНДАРТЫ
Отсутствуют.
ИСТОРИЯ
Эти функции выполнены в стиле, напоминающем версию POSIX функций типа getpwnam_r(3).
ПРИМЕЧАНИЯ
Функция getpwent_r() не совсем реентерабельна, так как она использует общую позицию чтения в потоке с
другими нитями.
ПРИМЕРЫ
#define _GNU_SOURCE
#include <pwd.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFLEN 4096
int
main(void)
{
struct passwd pw;
struct passwd *pwp;
char buf[BUFLEN];
int i;
setpwent();
while (1) {
i = getpwent_r(&pw, buf, sizeof(buf), &pwp);
if (i)
break;
printf("%s (%jd)\tHOME %s\tSHELL %s\n", pwp->pw_name,
(intmax_t) pwp->pw_uid, pwp->pw_dir, pwp->pw_shell);
}
endpwent();
exit(EXIT_SUCCESS);
}
СМОТРИТЕ ТАКЖЕ
fgetpwent(3), getpw(3), getpwent(3), getpwnam(3), getpwuid(3), putpwent(3), passwd(5)
ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>,
Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov
<yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной
лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских
переводчиков.
Справочные страницы Linux 6.9.1 15 июня 2024 г. getpwent_r(3)