pututline()

Добавить запись в файл информации о пользователях

Прототип:

#include <utmp.h>
void pututline( struct utmp *__utmp );

Аргументы:

__utmp
Указатель на структуру struct utmp, которая содержит записываемую информацию.

Библиотека:

libc

Описание:

Функция pututline() записывает переданную структуру struct utmp в файл utmp.

Она использует getutid() для поиска соответствующего места для записи, если подобная информация в файле отсутствует. Обычно следует выполнить поиск корректной записи в файле через getutent(), getutid() или getutline(). Если это было выполнено, pututline() не будет выполнять поиск. Если pututline() не находит подходящий слот для новой записи, она добавляется в конец файла.

Если вызов выполнен не пользователем root, pututline() привлекает setuid() от имени суперпользователя для проверки и записи в файл, если файл, указанный в _PATH_UTMP, доступен для записи только для суперпользователя. Поле ut_name должно соответствовать фактическому имени пользователя, ассоциированного с процессом; поле ut_type должно быть равно USER_PROCESS или DEAD_PROCESS; поле ut_line должно быть специальным файлом устройства, у которого есть разрешение на запись для данного пользователя.

Возвращаемое значение:

Указатель на struct utmp.

Переменные окружения:

_PATH_UTMP
Определяет файл с информацией о пользователе.

Классификация:

Unix

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Предостережения:

Самая последняя запись сохраняется в статической структуре. Скопируйте ее перед дальнейшим доступом.

При каждом вызове getutid() или getutline(), процедура проверяет статическую структуру перед выполнением дополнительных операций ввода/вывода. Если содержимое статической структуры соответствует тому, что она ищет, функция прекращает поиск. По этой причине, используйте getutline() для поиска нескольких вхождений, обнуляйте статическую область после каждого успешного вызова, или getutline() будет возвращать одинаковую структуру при каждом вызове.

Есть одно исключение из правила обнуления структуры до выполнения дальнейшего чтения: неявное чтение, выполняемое pututline() (если она обнаруживает, что она еще не в нужном месте в файле) не повреждает содержимое статической структуры, возвращаемой процедурами getutent(), getutid() или getutline(), если вы просто изменили это содержимое и передали указатель обратно в pututline().

Эти процедуры используют стандартный буферизованный ввод, однако pututline() использует небуферизованную нестандартную запись, чтобы избежать состояния гонки между процессами, пытающимися изменить файлы utmp и wtmp.

Тематические ссылки:

endutent(), getutent(), getutid(), getutline(), setutent(), struct utmp, utmpname()

login в Справочнике по Утилитам




Предыдущий раздел: Описание API системной библиотеки