Операционная система UNIX
Шрифт:
В программе использовалось еще не обсуждавшаяся возможность системного журнала сообщений выполняющихся программ. Функцией генерации сообщений является syslog(3), отправляющая сообщение демону системного журнала syslogd(1M), который в свою очередь либо дописывает сообщения в системный журнал, либо выводит на их консоль, либо перенаправляет в соответствии со списком пользователей данной или удаленной системы. Конкретный пункт назначения определяется конфигурационным файлом (/etc/syslog.conf). Функция имеет определение:
Каждому сообщению
LOG_EMERG | Идентифицирует состояние "паники" в системе. Обычно рассылается всем пользователям. |
LOG_ALERT | Идентифицирует ненормальное состояние, которое должно быть исправлено немедленно, например, нарушение целостности системной базы данных. |
LOG_CRIT | Идентифицирует критическое событие, например, ошибку дискового устройства. |
LOG_ERR | Идентифицирует различные ошибки. |
LOG_WARNING | Идентифицирует предупреждения. |
LOG_NOTICE | Идентифицирует события, которые не являются ошибками, но требуют внимания. |
LOG_INFO | Идентифицирует информационные сообщения, как, например, использованное в приведенной программе. |
LOG_DEBUG | Идентифицирует сообщение, обычно используемое только при отладке программы. |
Последний тип сообщений подсказывает еще одну возможность использования системного журнала — для отладки программ, особенно неинтерактивных.
Строка
Функция openlog(3) позволяет определить ряд опций ведения журнала. Она имеет следующее определение:
Строка
LOG_PID | Позволяет указывать идентификатор процесса в каждом сообщении. Эта опция полезна при журналировании нескольких демонов с одним и тем же значением ident, например, когда
|
LOG_CONS | Позволяет выводить сообщения на консоль при невозможности записи в журнал. |
Наконец, аргумент
LOG_KERN | Указывает, что сообщения отправляются ядром. |
LOG_USER | Указывает, что сообщения отправлены прикладным процессом (используется по умолчанию). |
LOG_MAIL | Указывает, что инициатором сообщений является система электронной почты. |
LOG_DAEMON | Указывает, что инициатором сообщений является системный демон. |
LOG_NEWS | Указывает, что инициатором сообщений является система телеконференций USENET. |
LOG_CRON | Указывает, что инициатором сообщений является система cron(1). |
Закончив работу с журналом, следует аккуратно закрыть его с помощью функции closelog(3):
Командный интерпретатор
Для примера интерактивного приложения, мы выбрали простейший командный интерпретатор. Данный пример позволяет продемонстрировать использование системных вызовов для порождения процесса, запуска программы и синхронизации выполнения процессов.
Функции приведенного командного интерпретатора сведены к минимуму: он распознает и выполняет несколько встроенных команд, остальной ввод он расценивает как внешние программы, которые и пытается запустить с помощью системного вызова exec(2).