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

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

       getgrent_r, fgetgrent_r - возвращает запись из файла групп (реентерабельные версии)

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <grp.h>

       int getgrent_r(struct group *restrict gbuf,
                      char buf[restrict .buflen], size_t buflen,
                      struct group **restrict gbufp);
       int fgetgrent_r(FILE *restrict stream, struct group *restrict gbuf,
                      char buf[restrict .buflen], size_t buflen,
                      struct group **restrict gbufp);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       getgrent_r():
           _GNU_SOURCE

       fgetgrent_r():
           начиная с glibc 2.19:
               _DEFAULT_SOURCE
           glibc 2.19 и старее:
               _SVID_SOURCE

ОПИСАНИЕ

       Функции  getgrent_r()  и  fgetgrent_r()  являются  реентерабельными  версиями getgrent(3) и fgetgrent(3).
       Первая читает следующую запись  группы  из  потока,  инициализированного  setgrent(3).  Последняя  читает
       следующую запись группы из stream.

       Структура group определена в <grp.h> следующим образом:

           struct group {
               char   *gr_name;        /* имя группы */
               char   *gr_passwd;      /* пароль группы */
               gid_t   gr_gid;         /* ID группы */
               char  **gr_mem;         /* массив, указателей
                                          имён членов группы, оканчивающийся NULL */
           };

       Подробней о полях этой структуры смотрите в group(5).

       The nonreentrant functions return a pointer to static storage, where this static storage contains further
       pointers to group name, password, and members.  The reentrant functions described here return all of that
       in  caller-provided  buffers.   First  of all there is the buffer gbuf that can hold a struct group.  And
       next the buffer buf of size buflen that can hold additional strings.  The result of these functions,  the
       struct  group  read from the stream, is stored in the provided buffer *gbuf, and a pointer to this struct
       group is returned in *gbufp.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении эти функции  возвращают  0  и  *gbufp  указывает  на  struct  group.  При  ошибке
       возвращается значение ошибки и *gbufp равен NULL.

ОШИБКИ

       ENOENT Больше записей нет.

       ERANGE Недостаточно места в буфере. Попробуйте ещё раз с большим буфером.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌───────────────┬──────────────────────┬────────────────────────────────────────────────────────────────┐
       │ ИнтерфейсАтрибутЗначение                                                       │
       ├───────────────┼──────────────────────┼────────────────────────────────────────────────────────────────┤
       │ getgrent_r()  │ Безвредность в нитях │ MT-Unsafe race:grent locale                                    │
       ├───────────────┼──────────────────────┼────────────────────────────────────────────────────────────────┤
       │ fgetgrent_r() │ Безвредность в нитях │ MT-Safe                                                        │
       └───────────────┴──────────────────────┴────────────────────────────────────────────────────────────────┘

       In  the above table, grent in race:grent signifies that if any of the functions setgrent(3), getgrent(3),
       endgrent(3), or getgrent_r() are used in parallel in different threads of  a  program,  then  data  races
       could occur.

ВЕРСИИ

       Other systems use the prototype

           struct group *getgrent_r(struct group *grp, char *buf,
                                    int buflen);

       или, лучше,

           int getgrent_r(struct group *grp, char *buf, int buflen,
                          FILE **gr_fp);

СТАНДАРТЫ

       GNU.

ИСТОРИЯ

       Эти функции выполнены в стиле, напоминающем версию POSIX функций типа getpwnam_r(3).

ПРИМЕЧАНИЯ

       Функция  getgrent_r()  не  совсем  реентерабельна, так как она использует общую позицию чтения в потоке с
       другими нитями.

ПРИМЕРЫ

       #define _GNU_SOURCE
       #include <grp.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #define BUFLEN 4096

       int
       main(void)
       {
           struct group grp;
           struct group *grpp;
           char buf[BUFLEN];
           int i;

           setgrent();
           while (1) {
               i = getgrent_r(&grp, buf, sizeof(buf), &grpp);
               if (i)
                   break;
               printf("%s (%jd):", grpp->gr_name, (intmax_t) grpp->gr_gid);
               for (size_t j = 0; ; j++) {
                   if (grpp->gr_mem[j] == NULL)
                       break;
                   printf(" %s", grpp->gr_mem[j]);
               }
               printf("\n");
           }
           endgrent();
           exit(EXIT_SUCCESS);
       }

СМОТРИТЕ ТАКЖЕ

       fgetgrent(3), getgrent(3), getgrgid(3), getgrnam(3), putgrent(3), group(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 г.                                   getgrent_r(3)