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

Основы программирования в Linux

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

В зависимости от настройки системы сообщения типа

LOG_EMER
могут пересылаться всем пользователям системы, сообщения
LOG_ALERT
могут отправляться по электронной почте администратору, сообщения
LOG_DEBUG
могут игнорироваться, а сообщения других типов могут записываться в файл. Вы можете написать программу, которая применяет средство регистрации сообщений, просто вызывая функцию
syslog
, когда вы хотите создать регистрируемое сообщение.

У сообщения, создаваемого

syslog
, есть заголовок и тело сообщения. Заголовок создается из индикатора типа программы, формирующей сообщение, и даты и времени. Тело сообщения создается из параметра
message
, передаваемого функции
syslog
, который действует как строка
format
функции
printf
. Остальные аргументы
syslog
используются в соответствии со спецификаторами преобразований в стиле функции
printf
, заданными в строке
message
. Дополнительно может применяться спецификатор
%m
для включения строки сообщения об ошибке, ассоциированной с текущим значением переменной
errno
. Эта возможность может оказаться полезной для регистрации сообщений об ошибках.

Выполните упражнение 4.13.

Упражнение 4.13. Применение функции
syslog

В этой программе осуществляется попытка открыть несуществующий файл.

#include <syslog.h>

#include <stdio.h>

#include <stdlib.h>

int main() {

 FILE *f;

 f = fopen("not_here", "r");

 if (!f) syslog(LOG_ERR|LOG_USER, "oops - %m\n");

 exit(0);

}

Когда вы откомпилируете и выполните программу syslog.с, то не увидите никакого вывода, но в конце файла /var/log/messages теперь содержится следующая строка:

Jun 9 09:24:50 suse103 syslog: oops — No such file or directory

Как это работает

В данной программе вы пытаетесь открыть файл, которого нет. Когда попытка заканчивается неудачно, вы вызываете функцию

syslog
для записи случившегося в системный журнал.

Обратите внимание на то, что регистрируемое сообщение не указывает, какая программа вызвала средство регистрации; оно просто констатирует тот факт, что была вызвана функция

syslog
с сообщением. Спецификатор преобразования
%m
был заменен описанием ошибки, в данном случае сообщающим об отсутствии файла. Это гораздо полезнее, чем простой отчет, содержащий внутренний номер ошибки.

В файле syslog.h определены и другие функции, применяемые для изменения поведения средств ведения системных журналов.

К ним относятся следующие функции:

<b>#include &lt;syslog.h&gt; void closelog(void);</b>

<b>void openlog(const char *ident, int logopt, int facility);</b>

<b>int setlogmask(int maskpri);</b>

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

openlog
. Это позволит задать строку
ident
, которая будет добавляться к вашим регистрируемым сообщениям. Вы можете применять ее для индикации программы, создавшей сообщение. Параметр
facility
записывает текущий принятый по умолчанию тип программы, формирующей сообщение, который будет использоваться в последующих вызовах
syslog
. По умолчанию устанавливается значение
LOG_USER
. Параметр
logopt
настраивает поведение будущих вызовов функции
syslog
. Он представляет собой результат поразрядной операции
OR
нулевого или большего числа параметров, приведенных в табл. 4.7.

Таблица 4.7

Параметр
logopt
Описание
LOG_PID
Включает в сообщения идентификатор процесса, уникальный номер, выделяемый системой каждому процессу
LOG_CONS
Посылает сообщения на консоль, если они не могут быть записаны
LOG_ODELAY
Открывает средство регистрации сообщений при первом вызове функции
syslog
LOG_NDELAY
Открывает средство регистрации сообщений немедленно, не дожидаясь первого регистрируемого сообщения

Функция

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

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

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

Вы можете создать маску для регистрируемых сообщений, используя значение

LOG_MASK(priority)
, создающее маску только для одного приоритета, или значение
LOG_UPTO(priority)
, создающее маску для всех приоритетов вплоть до заданного.

Выполните упражнение 4.14.

Упражнение 4.14. Маска регистрации (
logmask
)

В этом примере вы увидите

logmask
в действии.

#include &lt;syslog.h&gt;

#include &lt;stdio.h&gt;

#include &lt;unistd.h&gt;

#include &lt;stdlib.h&gt;


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

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

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