EMPTY |
В данной записи utmp нет достоверных данных (такие записи позже можно повторно использовать), поэтому игнорируйте ее содержимое. Другие элементы структуры являются незначащими. |
INIT_PROCESS |
Приведенный процесс был порожден непосредственно инициализацией. Это значение могут устанавливать системные программы (обычно только сам процесс инициализации); приложения должны прочитывать и распознавать это значение, но не должны ее устанавливать. Значащими являются элементы ut_pid , ut_id и ut_tv . |
LOGIN_PROCESS |
Экземпляры регистрационной программы, ожидающие регистрации пользователя. Элементы ut_id , ut_pid и ut_tv полезны; элемент ut_user полезен номинально (в Linux он сообщает LOGIN , но это имя процесса регистрации определяется реализацией в соответствии с POSIX). |
USER_PROCESS |
Этот элемент определяет лидера сеанса для зарегистрированного пользователя. Это может быть регистрационная программа после регистрации пользователя, управляющая программа монитора либо сеанса для входа в X Window System, программа эмуляции терминала, сконфигурированная для пометки сеансов регистрации, или любая интерактивная регистрация пользователя. Значащими являются элементы ut_id , ut_user , ut_line , ut_pid и ut_tv . |
DEAD_PROCESS |
Приведенный процесс был лидером сеанса для зарегистрированного пользователя, но завершился. Значащими являются элементы ut_id , ut_pid и ut_tv в соответствии POSIX. Элемент ut_exit (не установленный POSIX) значащий только в данном контексте. |
BOOT_TIME |
Время начальной загрузки системы. В utmp это самая поздняя загрузка; в wtmp это элемент для каждой загрузки системы со времени очистки wtmp. Значащим является только ut_tv . |
OLD_TIME и NEW_TIME |
Используются только для записи "скачков" времени. Записываются парами. Не рекомендуется зависеть от записи этих элементов в систему, даже если время на часах по какой-либо причине изменилось. |
RUN_LVL и ACCOUNTING |
Внутренние системные величины; в приложениях использовать не следует. |
Ниже приведены интерфейсы, определяемые XPG2, SVID 2 и FSSTND 1.2.
#include
int utmpname(char * file);
struct utmp *getutent(void);
struct utmp *getutid(const struct utmp * id);
struct utmp *getutline(const struct utmp * line);
struct utmp *pututline(const struct utmp * ut);
void setutent(void);
void endutent(void);
void updwtmp(const char * file, const struct utmp * ut);
void logwtmp(const char * line, const char * name, const char * host);
Каждая запись в базе данных utmp или wtmp называется строкой. Все функции, возвращающие указатель на struct utmp
, возвращают его на статические данные в случае успеха и NULL
— в случае ошибки. Обратите внимание, что статические данные переписаны каждым новым вызовом на каждую функцию, возвращающую struct utmp
. Также стандарт POSIX (для utmpx) требует очистки статических данных приложением перед началом какого-либо поиска.
Версии utmpx этих функций принимают struct utmpx
вместо struct utmp
, требуют включения utmpx.h
и называются getutxent
, getutxid
, getutxline
, pututxline
, setutxent
и endutxent
, но в другом случае они идентичны версиям utmp этих функций в Linux. Функции utmpxname()
, определенной POSIX, не существует, хотя некоторые платформы могут определять ее в любом случае (например, glibc).
Функция utmpname()
используется для определения просматриваемой базы данных. Базой данных по умолчанию является utmp, но вместо этого функцию можно применять для указания на wtmp. Два предопределенных имени — это _PATH_UTMP
для файла utmp и _PATH_WTMP
для файла wtmp; для целей тестирования можно выбрать указатель на локальную копию. Функция utmpname()
возвращает ноль в случае успеха и ненулевое значение в случае ошибки. Но успех может означать просто то, что имя файла удалось скопировать в библиотеку; это не означает, что база данных действительно существует в пути, предоставленном для нее.
Функция getutent()
просто возвращает следующую строку из базы данных. Если база данных еще не открыта, она возвращает содержимое первой строки. Если строки больше не доступны, она возвращает NULL
.
Функция getutid()
принимает struct utmp
и рассматривает лишь один или два элемента. Если ut_type
является BOOT_TIME
, OLD_TIME
или NEW_TIME
, она возвращает следующую строку этого типа. Если ut_type
является INIT_PROCESS
, LOGIN_PROCESS
, USER_PROCESS
или DEAD_PROCESS
, тогда getutid()
возвращает следующую строку, которая соответствует любому из типов, также имеющему значение ut_id
, которое соответствует значению ut_id
в struct utmp
, передаваемой getutid()
. Перед повторным вызовом потребуется удалить из struct utmp
данные, возвращаемые getutid()
; POSIX разрешает возвращать ту же строку, что и предыдущий вызов. Если соответствующих строк нет, возвращается NULL
.
Читать дальше