.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl) .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, see .\" . .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GETGRENT_R 3 "1 ноября 2020 г." GNU "Руководство программиста Linux" .SH ИМЯ getgrent_r, fgetgrent_r \- возвращает запись из файла групп (реентерабельные версии) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint getgrent_r(struct group *\fP\fIgbuf\fP\fB, char *\fP\fIbuf\fP\fB,\fP \fB size_t \fP\fIbuflen\fP\fB, struct group **\fP\fIgbufp\fP\fB);\fP .PP \fBint fgetgrent_r(FILE *\fP\fIstream\fP\fB, struct group *\fP\fIgbuf\fP\fB, char *\fP\fIbuf\fP\fB,\fP \fB size_t \fP\fIbuflen\fP\fB, struct group **\fP\fIgbufp\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP .\" FIXME . The FTM requirements seem inconsistent here. File a glibc bug? \fBgetgrent_r\fP(): _GNU_SOURCE .br \fBfgetgrent_r\fP(): начиная с glibc 2.19: _DEFAULT_SOURCE в glibc 2.19 и старее: _SVID_SOURCE .SH ОПИСАНИЕ Функции \fBgetgrent_r\fP() и \fBfgetgrent_r\fP() являются реентерабельными версиями \fBgetgrent\fP(3) и \fBfgetgrent\fP(3). Первая читает следующую запись группы из потока, инициализированного \fBsetgrent\fP(3). Последняя читает следующую запись группы из \fIstream\fP. .PP Структура \fIgroup\fP определена в \fI\fP следующим образом: .PP .in +4n .EX struct group { char *gr_name; /* имя группы */ char *gr_passwd; /* пароль группы */ gid_t gr_gid; /* ID группы */ char **gr_mem; /* массив, указателей имён членов группы, оканчивающийся NULL */ }; .EE .in .PP Подробней о полях этой структуры смотрите в \fBgroup\fP(5). .PP Нереентерабельные версии возвращают указатель на статическое хранилище, в котором хранятся другие указатели на имя группы, пароль и список членов. Реентерабельные функции, описанные здесь, возвращают всю информацию в буферах, предоставленных вызывающим. Основным буфером является \fIgbuf\fP, в котором может храниться \fIstruct group\fP. В дополнительном буфере \fIbuf\fP размера \fIbuflen\fP могут храниться дополнительные строки. Результат этих функций, прочитанная из потока \fIstruct group\fP, сохраняется в предоставляемый буфер \fI*gbuf\fP, и указатель на эту \fIstruct group\fP возвращается в \fI*gbufp\fP. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении эти функции возвращают 0 и \fI*gbufp\fP указывает на \fIstruct group\fP. При ошибке возвращается значение ошибки и \fI*gbufp\fP равен NULL. .SH ОШИБКИ .TP \fBENOENT\fP Больше записей нет. .TP \fBERANGE\fP Недостаточно места в буфере. Попробуйте ещё раз с большим буфером. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lb lb lbw27 l l l. Интерфейс Атрибут Значение T{ \fBgetgrent_r\fP() T} Безвредность в нитях MT\-Unsafe race:grent locale T{ \fBfgetgrent_r\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 In the above table, \fIgrent\fP in \fIrace:grent\fP signifies that if any of the functions \fBsetgrent\fP(3), \fBgetgrent\fP(3), \fBendgrent\fP(3), or \fBgetgrent_r\fP() are used in parallel in different threads of a program, then data races could occur. .SH "СООТВЕТСТВИЕ СТАНДАРТАМ" Эти функции являются расширениями GNU; они выполнены похожими на POSIX\-версию функции \fBgetpwnam_r\fP(3). В других системах используется прототип .PP .in +4n .EX struct group *getgrent_r(struct group *grp, char *buf, int buflen); .EE .in .PP или, лучше, .PP .in +4n .EX int getgrent_r(struct group *grp, char *buf, int buflen, FILE **gr_fp); .EE .in .SH ЗАМЕЧАНИЯ Функция \fBgetgrent_r\fP() не совсем реентерабельна, так как она использует общую позицию чтения в потоке с другими нитями. .SH ПРИМЕРЫ .EX #define _GNU_SOURCE #include #include #include #include #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 (int j = 0; ; j++) { if (grpp\->gr_mem[j] == NULL) break; printf(" %s", grpp\->gr_mem[j]); } printf("\en"); } endgrent(); exit(EXIT_SUCCESS); } .EE .\" perhaps add error checking - should use strerror_r .\" #include .\" #include .\" if (i) { .\" if (i == ENOENT) .\" break; .\" printf("getgrent_r: %s", strerror(i)); .\" exit(EXIT_FAILURE); .\" } .SH "СМ. ТАКЖЕ" \fBfgetgrent\fP(3), \fBgetgrent\fP(3), \fBgetgrgid\fP(3), \fBgetgrnam\fP(3), \fBputgrent\fP(3), \fBgroup\fP(5) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .