Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       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)