.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1995 Mark D. Roth (roth@uiuc.edu) .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" References consulted: .\" Linux libc source code .\" Solaris manpages .\" .\" Modified Thu Jul 25 14:43:46 MET DST 1996 by Michael Haardt .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getutent 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ getutent, getutid, getutline, pututline, setutent, endutent, utmpname \- доступ к записям файла utmp .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBstruct utmp *getutent(void);\fP \fBstruct utmp *getutid(const struct utmp *\fP\fIut\fP\fB);\fP \fBstruct utmp *getutline(const struct utmp *\fP\fIut\fP\fB);\fP .PP \fBstruct utmp *pututline(const struct utmp *\fP\fIut\fP\fB);\fP .PP \fBvoid setutent(void);\fP \fBvoid endutent(void);\fP .PP \fBint utmpname(const char *\fP\fIfile\fP\fB);\fP .fi .SH ОПИСАНИЕ New applications should use the POSIX.1\-specified "utmpx" versions of these functions; see STANDARDS. .PP Функция \fButmpname\fP() задаёт имя файла в формате utmp для других функций utmp. Если \fButmpname\fP() не используется для указания имени файла перед работой с другими функциями, то они будут использовать имя из \fB_PATH_UTMP\fP, определённое в \fI\fP. .PP Функция \fBsetutent\fP() переносит указатель начало файла utmp. Вообще, оптимальным вариантом считается вызывать эту функцию перед вызовом остальных. .PP Функция \fBendutent\fP() закрывает файл utmp. Она должна быть вызвана, когда будет завершена работа с файлом посредством других функций. .PP Функция \fBgetutent\fP() считывает строку, начиная с текущей позиции файла в файле utmp. Она возвращает указатель на структуру, содержащую поля этой строки. Определение структуры приведено в \fButmp\fP(5). .PP Функция \fBgetutid\fP() производит прямой поиск, начиная с текущей позиции файла в файле utmp, основываясь на данных \fIut\fP. Если значение \fIut\->ut_type\fP равно \fBRUN_LVL\fP, \fBBOOT_TIME\fP, \fBNEW_TIME\fP или \fBOLD_TIME\fP, то \fBgetutid\fP() найдёт первую запись, поле \fIut_type\fP которой совпадает с \fIut\->ut_type\fP. Если \fIut\->ut_type\fP равно \fBINIT_PROCESS\fP, \fBLOGIN_PROCESS\fP, \fBUSER_PROCESS\fP или \fBDEAD_PROCESS\fP, то \fBgetutid\fP() найдёт первую запись, поле \fIut_id\fP которой совпадает с \fIut\->ut_id\fP. .PP Функция \fBgetutline\fP() производит прямой поиск, начиная с текущей позиции файла в файле utmp. Она просматривает записи, у которых поле \fIut_type\fP совпадает с \fBUSER_PROCESS\fP или \fBLOGIN_PROCESS\fP, и возвращает первую запись, поле \fIut_line\fP которой совпадает с \fIut\->ut_line\fP. .PP Функция \fBpututline\fP() записывает структуру \fIutmp\fP \fIut\fP в файл utmp. Для поиска места в файле, необходимого для вставки новой записи, используется \fBgetutid\fP() . Если такое место не найдено, то \fBpututline\fP() добавит запись в конец файла. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении функции \fBgetutent\fP(), \fBgetutid\fP() и \fBgetutline\fP() возвращают указатель на \fIstruct utmp\fP и NULL при ошибке (к ним относится и случай «запись не найдена»). Структура \fIstruct utmp\fP располагается в статическом хранилище и может быть изменена последующими вызовами. .PP При успешном выполнении \fBpututline\fP() возвращает \fIut\fP; при ошибке возвращается NULL. .PP При успешном назначении нового имени функция \fButmpname\fP() возвращает 0 и \-1 при ошибке. .PP On failure, these functions \fIerrno\fP set to indicate the error. .SH ОШИБКИ .TP \fBENOMEM\fP Не хватает памяти. .TP \fBESRCH\fP Запись не найдена. .PP Функции \fBsetutent\fP(), \fBpututline\fP() и \fBgetut*\fP() также могут завершиться с ошибкой по причинам, описанным в \fBopen\fP(2). .SH ФАЙЛЫ .TP \fI/var/run/utmp\fP база данных пользователей, находящихся в системе в данный момент .TP \fI/var/log/wtmp\fP база данных предыдущих пользовательских входов в систему .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lb lb lbx l l l. Интерфейс Атрибут Значение T{ .na .nh \fBgetutent\fP() T} Безвредность в нитях T{ .na .nh MT\-Unsafe init race:utent race:utentbuf sig:ALRM timer T} T{ .na .nh \fBgetutid\fP(), \fBgetutline\fP() T} Безвредность в нитях T{ .na .nh MT\-Unsafe init race:utent sig:ALRM timer T} T{ .na .nh \fBpututline\fP() T} Безвредность в нитях T{ .na .nh MT\-Unsafe race:utent sig:ALRM timer T} T{ .na .nh \fBsetutent\fP(), \fBendutent\fP(), \fButmpname\fP() T} Безвредность в нитях MT\-Unsafe race:utent .TE .sp 1 В приведённой выше таблице \fIutent\fP в \fIrace:utent\fP означает, что если в нескольких нитях программы одновременно используются функции \fBsetutent\fP(), \fBgetutent\fP(), \fBgetutid\fP(), \fBgetutline\fP(), \fBpututline\fP(), \fButmpname\fP() или \fBendutent\fP(), то может возникнуть состязательность по данным. .SH СТАНДАРТЫ None. .SH ИСТОРИЯ XPG2, SVr4. .PP Согласно XPG2 и SVID 2 функция \fBpututline\fP() возвращает тип void и такое поведение можно встретить во многих системах (AIX, HP\-UX). В HP\-UX представлена новая функция \fB_pututline\fP() с прототипом приведённым выше для \fBpututline\fP(). .PP Эти функции являются устаревшими в не Linux системах. POSIX.1\-2001 и POSIX.1\-2008, следуя SUSv1, не содержит эти функции, вместо них используются .PP .RS 4 .EX \fB#include \fP .PP \fBstruct utmpx *getutxent(void);\fP \fBstruct utmpx *getutxid(const struct utmpx *);\fP \fBstruct utmpx *getutxline(const struct utmpx *);\fP \fBstruct utmpx *pututxline(const struct utmpx *);\fP \fBvoid setutxent(void);\fP \fBvoid endutxent(void);\fP .EE .RE .PP Эти функции предоставляются glibc и выполняют те же задачи что и их аналоги без «x»", но используют \fIstruct utmpx\fP, определённую в Linux подобно \fIstruct utmp\fP. Для завершённости, в glibc также есть \fButmpxname\fP(), хотя эта функция отсутствует в POSIX.1. .PP В некоторых других системах структура \fIutmpx\fP представляет собой \fIutmp\fP с дополнительными полями и увеличенными размерами одинаковых полей, а также параллельно обслуживаются обе версии файлов, часто \fI/var/*/utmpx\fP и \fI/var/*/wtmpx\fP. .PP С другой стороны, в Linux glibc не используется второй файл \fIutmpx\fP, так как её структура \fIutmp\fP имеет достаточный размер. Функции с «x», перечисленные выше, являются просто псевдонимами их аналогов без «x» (например, \fBgetutxent\fP() псевдоним \fBgetutent\fP()). .SH ЗАМЕЧАНИЯ .SS "Замечания по glibc" The above functions are not thread\-safe. glibc adds reentrant versions .PP .nf \fB#include \fP .PP \fBint getutent_r(struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP \fBint getutid_r(struct utmp *\fP\fIut\fP\fB,\fP \fB struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP \fBint getutline_r(struct utmp *\fP\fIut\fP\fB,\fP \fB struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP .fi .PP Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .PP \fBgetutent_r\fP(), \fBgetutid_r\fP(), \fBgetutline_r\fP(): .nf _GNU_SOURCE || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE .fi .PP Эти функции являются расширениями GNU, они аналогичны функциям с тем же именем без суффикса _r. В аргумент \fIubuf\fP, передаваемый этим функциям, помещается результат. При успешном выполнении они возвращают 0 и указатель на результат записывается в \fI*ubufp\fP. При ошибке эти функции возвращают \-1. Среди этих функций отсутствует эквиваленты utmpx (в POSIX.1 такие функции отсутствуют). .SH ПРИМЕРЫ Нижеследующий пример добавляет и удаляет запись utmp, предполагается, что программа запущена с псевдотерминала. Для использования в реальном приложении необходимо проверять значения, возвращаемые \fBgetpwuid\fP(3) и \fBttyname\fP(3). .PP .\" SRC BEGIN (getutent.c) .EX #include #include #include #include #include #include \& int main(void) { struct utmp entry; \& system("echo before adding entry:;who"); \& entry.ut_type = USER_PROCESS; entry.ut_pid = getpid(); strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/")); /* only correct for ptys named /dev/tty[pqr][0\-9a\-z] */ strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty")); time(&entry.ut_time); strcpy(entry.ut_user, getpwuid(getuid())\->pw_name); memset(entry.ut_host, 0, UT_HOSTSIZE); entry.ut_addr = 0; setutent(); pututline(&entry); \& system("echo after adding entry:;who"); \& entry.ut_type = DEAD_PROCESS; memset(entry.ut_line, 0, UT_LINESIZE); entry.ut_time = 0; memset(entry.ut_user, 0, UT_NAMESIZE); setutent(); pututline(&entry); \& system("echo after removing entry:;who"); \& endutent(); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBgetutmp\fP(3), \fButmp\fP(5) .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 .