UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Например, демон может сделать следующий вызов, когда вызов функции
renamesyslog(LOG_INFO|LOG_LOCAL2, "rename(%s, %s): %m", file1, file2);Назначение аргументов
facilitylevelfacility/etc/syslog.conflevelkern.* /dev/consolelocal7.debug /var/log/cisco.logдля указания, что все сообщения ядра направляются на консоль, а сообщения относительно отладки со значением аргумента
facilitylocal7/var/log/cisco.logКогда приложение впервые вызывает функцию
syslogconnectsyslogd/var/run/logopenlogcloselog#include <syslog.h>void openlog(const char *<i>ident</i>, int <i>options</i>, int <i>facility</i>);void closelog(void);Функция
openlogsyslogcloselogАргумент
identsyslogОбычно аргумент
optionsТаблица 13.3. Аргумент options (параметр) для функции openlog
| Параметр | Описание |
|---|---|
| LOG_CONS | Выводить журнал на консоль, если невозможно послать сообщение демону syslogd |
| LOG_NDELAY | Не откладывать создание сокета, открыть его сейчас |
| LOG_PERROR | Записывать сообщение в stderr, а также посылать его демону syslogd |
| LOG_PID | Включать идентификатор процесса (PID) в каждую запись журнала |
Обычно доменный сокет Unix не создается при вызове функции
openlogsyslogLOG_NDELAYopenlogАргумент
facilityopenlogfacilitysyslogfacilityopenlogfacilitysysloglevellevelСообщения для записи в журнал могут также генерироваться командой
loggersyslogd13.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("/"); /* смена текущего каталога */
