.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1995, Mark D. Roth .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getutent 3 "8 февраля 2026 г." "Linux man\-pages 6.18" .SH НАИМЕНОВАНИЕ getutent, getutid, getutline, pututline, setutent, endutent, utmpname \- доступ к записям файла utmp .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \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 .P \fBstruct utmp *pututline(const struct utmp *\fP\fIut\fP\fB);\fP .P \fBvoid setutent(void);\fP \fBvoid endutent(void);\fP .P \fBint utmpname(const char *\fP\fIpath\fP\fB);\fP .fi .SH ОПИСАНИЕ New applications should use the POSIX.1\-specified "utmpx" versions of these functions; see STANDARDS. .P \fButmpname\fP() sets the pathname of the utmp\-format file for the other utmp functions to access. If \fButmpname\fP() is not used to set the pathname before the other functions are used, they assume \fB_PATH_UTMP\fP, as defined in \fI\fP. .P Функция \fBsetutent\fP() переносит указатель начало файла utmp. Вообще, оптимальным вариантом считается вызывать эту функцию перед вызовом остальных. .P Функция \fBendutent\fP() закрывает файл utmp. Она должна быть вызвана, когда будет завершена работа с файлом посредством других функций. .P Функция \fBgetutent\fP() считывает строку, начиная с текущей позиции файла в файле utmp. Она возвращает указатель на структуру, содержащую поля этой строки. Определение структуры приведено в \fButmp\fP(5). .P Функция \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. .P Функция \fBgetutline\fP() производит прямой поиск, начиная с текущей позиции файла в файле utmp. Она просматривает записи, у которых поле \fIut_type\fP совпадает с \fBUSER_PROCESS\fP или \fBLOGIN_PROCESS\fP, и возвращает первую запись, поле \fIut_line\fP которой совпадает с \fIut\->ut_line\fP. .P Функция \fBpututline\fP() записывает структуру \fIutmp\fP \fIut\fP в файл utmp. Для поиска места в файле, необходимого для вставки новой записи, используется \fBgetutid\fP() . Если такое место не найдено, то \fBpututline\fP() добавит запись в конец файла. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" \fBgetutent\fP(), \fBgetutid\fP(), and \fBgetutline\fP() return a pointer to a \fIstruct\ utmp\fP on success, and NULL on failure (which includes the "record not found" case). This \fIstruct\ utmp\fP is allocated in static storage, and may be overwritten by subsequent calls. .P При успешном выполнении \fBpututline\fP() возвращает \fIut\fP; при ошибке возвращается NULL. .P При успешном назначении нового имени функция \fButmpname\fP() возвращает 0 и \-1 при ошибке. .P On failure, these functions \fIerrno\fP set to indicate the error. .SH ОШИБКИ .TP \fBENOMEM\fP Не хватает памяти. .TP \fBESRCH\fP Запись не найдена. .P Функции \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 .P В приведённой выше таблице \fIutent\fP в \fIrace:utent\fP означает, что если в нескольких нитях программы одновременно используются функции \fBsetutent\fP(), \fBgetutent\fP(), \fBgetutid\fP(), \fBgetutline\fP(), \fBpututline\fP(), \fButmpname\fP() или \fBendutent\fP(), то может возникнуть состязательность по данным. .SH СТАНДАРТЫ Отсутствуют. .SH ИСТОРИЯ XPG2, SVr4. .P Согласно XPG2 и SVID 2 функция \fBpututline\fP() возвращает тип void и такое поведение можно встретить во многих системах (AIX, HP\-UX). В HP\-UX представлена новая функция \fB_pututline\fP() с прототипом приведённым выше для \fBpututline\fP(). .P Эти функции являются устаревшими в не Linux системах. POSIX.1\-2001 и POSIX.1\-2008, следуя SUSv1, не содержит эти функции, вместо них используются .P .RS 4 .EX \fB#include \fP .P \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 .P Эти функции предоставляются glibc и выполняют те же задачи что и их аналоги без «x»", но используют \fIstruct utmpx\fP, определённую в Linux подобно \fIstruct utmp\fP. Для завершённости, в glibc также есть \fButmpxname\fP(), хотя эта функция отсутствует в POSIX.1. .P В некоторых других системах структура \fIutmpx\fP представляет собой \fIutmp\fP с дополнительными полями и увеличенными размерами одинаковых полей, а также параллельно обслуживаются обе версии файлов, часто \fI/var/*/utmpx\fP и \fI/var/*/wtmpx\fP. .P С другой стороны, в 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 .P .nf \fB#include \fP .P \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 .P Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .P \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 .P Эти функции являются расширениями GNU, они аналогичны функциям с тем же именем без суффикса _r. В аргумент \fIubuf\fP, передаваемый этим функциям, помещается результат. При успешном выполнении они возвращают 0 и указатель на результат записывается в \fI*ubufp\fP. При ошибке эти функции возвращают \-1. Среди этих функций отсутствует эквиваленты utmpx (в POSIX.1 такие функции отсутствуют). .SH ПРИМЕРЫ Нижеследующий пример добавляет и удаляет запись utmp, предполагается, что программа запущена с псевдотерминала. Для использования в реальном приложении необходимо проверять значения, возвращаемые \fBgetpwuid\fP(3) и \fBttyname\fP(3). .P .\" SRC BEGIN (getutent.c) .EX #include #include #include #include #include #include #include \& int main(void) { struct utmp entry; \& if (system("echo before adding entry:;who") == \-1) err(EXIT_FAILURE, "system"); \& 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")); entry.ut_time = time(NULL); strcpy(entry.ut_user, getpwuid(getuid())\->pw_name); memset(entry.ut_host, 0, UT_HOSTSIZE); entry.ut_addr = 0; setutent(); if (pututline(&entry) == NULL) err(EXIT_FAILURE, "pututline"); \& if (system("echo after adding entry:;who") == \-1) err(EXIT_FAILURE, "system"); \& entry.ut_type = DEAD_PROCESS; memset(entry.ut_line, 0, UT_LINESIZE); entry.ut_time = 0; memset(entry.ut_user, 0, UT_NAMESIZE); setutent(); if (pututline(&entry) == NULL) err(EXIT_FAILURE, "pututline"); \& if (system("echo after removing entry:;who") == \-1) err(EXIT_FAILURE, "system"); \& endutent(); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМОТРИТЕ ТАКЖЕ" \fBgetutmp\fP(3), \fButmp\fP(5) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT debian-l10n-russian@lists.debian.org списка рассылки русских переводчиков .ME .