UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Например, демон может сделать следующий вызов, когда вызов функции
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
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. Аргумент 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 "unp.h"
2 #include <syslog.h>
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()) < 0)
11 return (-1);
12 else if (pid)
13 _exit(0); /* родитель завершается */
14 /* 1-й дочерний процесс продолжает работу... */
15 if (setsid() < 0) /* становится главным процессом сеанса */
16 return (-1);
17 Signal(SIGHUP, SIG_IGN);
18 if ((pid = Fork()) < 0)
19 return (-1);
20 else if (pid)
21 _exit(0); /* 1-й дочерний процесс завершается */
22 /* 2-й дочерний процесс продолжает работу */
23 daemon_proc = 1; /* для функций err_XXX() */
24 chdir("/"); /* смена текущего каталога */