Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

Ниже приведены интерфейсы, определяемые XPG2, SVID 2 и FSSTND 1.2.

#include <utmp.h>

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
.

Функция

getutline
возвращает следующую строку с
ut_id
, установленным в
LOGIN_PROCESS
или
USER_PROCESS
. Эти процессы тоже имеют значение
ut_line
, соответствующее значению
ut_line
в
struct utmp
, которая передается в
getutline
. Как и в случае
getutid
, необходимо удалить данные, возвращаемые
getutline
, из
struct utmp
перед его повторным вызовом; в противном случае POSIX разрешает возвращать ту же строку, что и предыдущий вызов. Если соответствующих строк нет, возвращается
NULL
.

Функция

pututline
модифицирует (или по необходимости добавляет) запись базы данных, соответствующую элементу
ut_line
аргумента
struct utmp
. Она делает это только в том случае, если у процесса есть полномочия на модификацию базы данных. Если модификация базы данных прошла успешно, она возвращает
struct utmp
, который соответствует данным, записанным в базу. В ином случае возвращается
NULL
. Функция
pututline
не применима к базе данных wtmp. Для модификации базы данных wtmp используйте
updwtmp
или
logwtmp
.

Функция

setutent
перемещает внутренний указатель базы данных в начало.

Функция

endutent
закрывает базу данных. Это закрывает файловый дескриптор и освобождает ассоциированные данные. Вызывайте
endutent
как перед использованием
utmpname
для доступа к другому файлу utmp, так и после завершения доступа к данным utmp.

Наиболее надежным способом модификации базы данных wtmp являются две функции, определенные BSD и доступные как часть glibc.

Функция

updwtmp
принимает файловое имя базы данных wtmp (обычно
_PATH_WTMP
) и заполненную структуру
struct utmp
, пытаясь добавить элемент к файлу wtmp. Эта функция не сообщает об ошибках.

Функция

logwtmp
является удобной функцией, заполняющей
struct utmp
и вызывающей
updwtmp
для нее. Аргумент
line
копируется в
ut_line
,
name
— в
ut_user
,
host
— в
ut_host
,
ut_tv
заполняется текущим показанием времени, a
ut_pid
— текущим идентификатором процесса. Как и
updwtmp
, эта функция не сообщает об ошибках.

В программе utmp демонстрируются некоторые методы чтения баз данных utmp и wtmp.

1: /* utmp.с */

2:

3: #include <stdio.h>

4: #include <unistd.h>

5: #include <string.h>

6: #include <time.h>

7: #include <sys/time.h>

8: #include <sys/types.h>

9: #include <sys/socket.h>

Поделиться:
Популярные книги

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

Газлайтер. Том 9

Володин Григорий
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Жребий некроманта 2

Решетов Евгений Валерьевич
2. Жребий некроманта
Фантастика:
боевая фантастика
6.87
рейтинг книги
Жребий некроманта 2

Безымянный раб

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
фэнтези
9.31
рейтинг книги
Безымянный раб

Я тебя не отпускал

Рам Янка
2. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.55
рейтинг книги
Я тебя не отпускал

Меняя маски

Метельский Николай Александрович
1. Унесенный ветром
Фантастика:
боевая фантастика
попаданцы
9.22
рейтинг книги
Меняя маски

СД. Том 15

Клеванский Кирилл Сергеевич
15. Сердце дракона
Фантастика:
героическая фантастика
боевая фантастика
6.14
рейтинг книги
СД. Том 15

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Идеальный мир для Социопата 6

Сапфир Олег
6. Социопат
Фантастика:
боевая фантастика
рпг
6.38
рейтинг книги
Идеальный мир для Социопата 6

Огни Аль-Тура. Завоеванная

Макушева Магда
4. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Огни Аль-Тура. Завоеванная

Жена по ошибке

Ардова Алиса
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Жена по ошибке

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Чехов. Книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
альтернативная история
5.00
рейтинг книги
Чехов. Книга 3