Mir-knigi.online
Книги онлайн читать бесплатно!
  • Главная
  • Жанры
  • ТОП книг
  • ТОП авторов
  • Контакты

UNIX: разработка сетевых приложений

Часть 148 из 399 Информация о книге

Например, демон может сделать следующий вызов, когда вызов функции

rename
неожиданно оказывается неудачным:

syslog(LOG_INFO|LOG_LOCAL2, "rename(%s, %s): %m", file1, file2);

Назначение аргументов

facility
и
level
в том, чтобы все сообщения, которые посылаются процессами определенного типа (то есть с одним значением аргумента
facility
), могли обрабатываться одинаково в файле
/etc/syslog.conf
или чтобы все сообщения одного уровня (с одинаковым значением аргумента
level
) обрабатывались одинаково. Например, файл конфигурации может содержать строки

kern.* /dev/console

local7.debug /var/log/cisco.log

для указания, что все сообщения ядра направляются на консоль, а сообщения относительно отладки со значением аргумента

facility
, равным
local7
, добавляются в файл
/var/log/cisco.log
.

Когда приложение впервые вызывает функцию

syslog
, она создает дейтаграммный доменный сокет Unix и затем вызывает функцию
connect
для сокета с заранее известным полным именем, которое создано демоном
syslogd
(например,
/var/run/log
). Этот сокет остается открытым, пока процесс не завершится. Другим вариантом является вызов процессом функций
openlog
и
closelog
.

#include <syslog.h>

void openlog(const char *<i>ident</i>, int <i>options</i>, int <i>facility</i>);

void closelog(void);

Функция

openlog
может быть вызвана перед первым вызовом функции
syslog
, а функция
closelog
— когда приложение закончит отправлять сообщения в журнал.

Аргумент

ident
— это строка, которая будет добавлена в начало каждого журнального сообщения функцией
syslog
. Часто это имя программы.

Обычно аргумент

options
формируется путем применения операции логического ИЛИ к константам из табл. 13.3.

Таблица 13.3. Аргумент options (параметр) для функции openlog

Параметр Описание
LOG_CONS Выводить журнал на консоль, если невозможно послать сообщение демону syslogd
LOG_NDELAY Не откладывать создание сокета, открыть его сейчас
LOG_PERROR Записывать сообщение в stderr, а также посылать его демону syslogd
LOG_PID Включать идентификатор процесса (PID) в каждую запись журнала

Обычно доменный сокет Unix не создается при вызове функции

openlog
. Вместо этого сокет открывается при первом вызове функции
syslog
. Параметр
LOG_NDELAY
указывает, что сокет должен создаваться при вызове функции
openlog
.

Аргумент

facility
функции
openlog
задает значение
facility
, используемое по умолчанию для любого последующего вызова функции
syslog
, при котором не задается аргумент
facility
. Некоторые демоны вызывают функцию
openlog
и задают значение аргумента
facility
(которое обычно не изменяется для данного демона) и затем в каждом вызове функции
syslog
задают только аргумент
level
(поскольку
level
может изменяться в зависимости от ошибки).

Сообщения для записи в журнал могут также генерироваться командой

logger
. Это может использоваться в сценариях интерпретатора команд, например для отправки сообщений демону
syslogd
.

13.4. Функция daemon_init

В листинге 13.1 [1] показана функция, называемая

daemon_init
, которую мы можем вызвать (обычно с сервера), чтобы придать процессу свойства демона.

Листинг 13.1. Функция daemon_init: придание процессу свойств демона

//daemon _init.с

 1 #include &quot;unp.h&quot;

 2 #include &lt;syslog.h&gt;

 3 #define MAXFD 64

 4 extern int daemon_proc; /* определен в error.с */

 5 int

 6 daemon_init(const char *pname, int facility)

 7 {

 8  int i;

 9  pid_t pid;

10  if ((pid = Fork()) &lt; 0)

11   return (-1);

12  else if (pid)

13   _exit(0); /* родитель завершается */

14  /* 1-й дочерний процесс продолжает работу... */

15  if (setsid() &lt; 0) /* становится главным процессом сеанса */

16   return (-1);

17  Signal(SIGHUP, SIG_IGN);

18  if ((pid = Fork()) &lt; 0)

19   return (-1);

20  else if (pid)

21   _exit(0); /* 1-й дочерний процесс завершается */

22  /* 2-й дочерний процесс продолжает работу */

23  daemon_proc = 1; /* для функций err_XXX() */

24  chdir(&quot;/&quot;); /* смена текущего каталога */


Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело
  • Деловая литература
  • Детективы и триллеры
  • Детские
  • Детские книги
  • Документальная литература
  • Дом и дача
  • Дом и Семья
  • Жанр не определен
  • Зарубежная литература
  • Знания и навыки
  • История
  • Компьютеры и Интернет
  • Легкое чтение
  • Любовные романы
  • Научно-образовательная
  • Образование
  • Поэзия и драматургия
  • Приключения
  • Проза
  • Прочее
  • Психология и мотивация
  • Публицистика и периодические издания
  • Религия и духовность
  • Родителям
  • Серьезное чтение
  • Спорт, здоровье и красота
  • Справочная литература
  • Старинная литература
  • Техника
  • Фантастика и фентези
  • Фольклор
  • Хобби и досуг
  • Юмор
Mir-knigi.online

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • [email protected]
Информация
  • Карта сайта
© mir-knigi.online, 2026. | Вход