Man page - fgetpwent_r(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

getpwent_r

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
АТРИБУТЫ
ВЕРСИИ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕЧАНИЯ
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

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

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).

Image grohtml-609670-1.png

В приведённой выше таблице 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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .