Unix Man (Справочное руководство)


LOG(7) - часть 2


struct strioctl { int ic_cmd; /* Команда */ int ic_timout; /* Таймаут */ int ic_len; /* Длина данных */ char *ic_dp; /* Указатель на данные */ };

Для того, чтобы обрабатывать сообщения об ошибках, необходимо в поле ic_cmd передаваемой структуры записать константу I_ERRLOG, в поле ic_len - 0, а в поле ic_dp NULL. Для того, чтобы обрабатывать трассировочные сообщения, необходимо в поле ic_cmd передаваемой структуры записать константу I_TRCLOG, в поле ic_dp задать адрес массива структур типа struct trace_ids, а в поле ic_len - длину этого массива в байтах.

struct trace_ids { short ti_mid; short ti_sid; char ti_level; };

Каждый элемент массива задает значения идентификатора модуля, идентификатора устройства и уровня принимаемых сообщений. Функция strlog будет выдавать только те сообщения, для которых значения идентификаторов модуля и устройства совпадают с указанными в массиве, а значение уровня не превосходит указанного в массиве. Задание значения -1 в любом из полей ti_mid, ti_sid, ti_level означает отсутствие соответствующих ограничений.

В каждый момент времени только один процесс может обрабатывать сообщения об ошибках и только один процесс может обрабатывать трассировочные сообщения.

После того, как процесс с помощью системного вызова ioctl об явил, что он будет обрабатывать сообщения, log начинает посылать ему все сообщения, удовлетворяющие указанным ограничениям. Эти сообщения можно получить с помощью системного вызова .

Управляющая область сообщения содержит структуру типа struct log_ctl, в которой указаны идентификаторы модуля и устройства, уровень, флаги, время посылки сообщения в тактах часов от последней загрузки системы, то же время в секундах от 1 января 1970 года и порядковый номер.

struct log_ctl { short mid; short sid; char level; short flags; long ltime; /* Время в тактах от загрузки */ long ttime; /* Время в секундах от 1.01.1970 */ long seq_no; /* Порядковый номер */ };

Время в секундах от 1 января 1970 года позволяет узнать, когда было послано сообщение, а время в тактах позволяет получить информацию об интервалах между сообщениями. Поддерживаются два ряда последовательных номеров: для сообщений об ошибках и для трассировочных сообщений. Пропуски в порядковых номерах позволяют определить факт потери сообщений при чересчур высокой интенсивности обменов.




Начало  Назад  Вперед