The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

klogctl (3)
  • >> klogctl (3) ( Русские man: Библиотечные вызовы )
  • klogctl (3) ( Linux man: Библиотечные вызовы )
  •  

    НАЗВАНИЕ

    syslog, klogctl - читает и/или очищает кольцевой буфер сообщений ядра, устанавливает console_loglevel  

    СИНТАКСИС

    /* Интерфейс glibc */
    
    #include <sys/klog.h> int klogctl(int type, char *bufp, int len); /* Непосредственно системный вызов */
    #include <unistd.h>
    #include <linux/unistd.h> _syscall3(int, syslog, int, type, char *, bufp, int, len); int syslog(int type, char *bufp, int len);
     

    ОПИСАНИЕ

    Если вам необходима функция libc syslog(), (которая описывает syslogd(8)), то смотрите syslog(3). Системный вызов с этим именем предназначен для управления буфером printk() ядра, glibc версия этой функции называется klogctl().

    Параметр type определяет действие выполняемое этой функцией.

    Вырезка из файла kernel/printk.c:

    /*
     * Команды sys_syslog:
     *
     *      0 -- Закрыть системный журнал. В настоящий момент не работает.
     *      1 -- Открыть системный журнал. В настоящий момент не работает.
     *      2 -- Прочитать содержимое журнала.
     *      3 -- Прочитать до 4-х Кб последних сообщений ядра из кольцевого буфера.
     *      4 -- Прочитать и очистить до 4-х Кб последних сообщений ядра из кольцевого буфера
     *      5 -- Очистить кольцевой буфер.
     *      6 -- Запретить вывод printk на консоль
     *      7 -- Разрешить вывод printk на консоль
     *      8 -- Установить уровень сообщений, выводимых на консоль
     *      9 -- Возврат числа непрочитанных символов в буфере журнала
     */
    
    Несуперпользовательским процессам разрешено вызывать только функцию номер 3. (Функция 9 была добавлена в 2.4.10.)

    Буфер системного журнала
    В ядре существует кольцевой буфер длиной LOG_BUF_LEN (4096, начиная с ядра 1.3.54: 8192, начиная с 2.1.113: 16384l в последних ядрах размер может быть изменен при сборке ядра), где содержатся сообщения ядра, представленные в виде параметра к функции printk() (независимо от их уровня журналирования).

    Системный вызов syslog (2,buf,len) ожидает появления сообщения в буфере и затем записывает максимум len байтов в буфер buf. После этого она возвращает количество прочитанных байтов. Байты, прочитанные из журнала, исчезают из буфера: информацию в нем можно прочесть только один раз. Эта функция исполняется при чтении пользовательской программой файла /proc/kmsg. Системный вызов syslog (3,buf,len) читает последние len байтов из буфера журнала (не разрушая его), но не больше, чем было записано в буфер с момента вызова команды "очистка кольцевого буфера" (которая на самом деле буфер не очищает). Этот вызов возвращает количество прочитанных байтов. Системный вызов syslog (4,buf,len) выполняет то же самое, но еще вызывает команду "очистка кольцевого буфера". Системный вызов syslog (5,dummy,idummy) просто исполняет команду "очистка кольцевого буфера". Уровень сообщений ядра в журнале
    Функция ядра printk() выводит сообщение на консоль только в том случае, если его уровень меньше console_loglevel (по умолчанию установленное значение которого равно DEFAULT_CONSOLE_LOGLEVEL (7), но это значение будет равно 10-и, если командная строка ядра содержит слово `debug', и 15-и в случае ошибки ядра; эти значения не имеют большого смысла и аналогичны 8-и). Значение переменной (из диапазона от единицы до восьми) устанавливается системным вызовом syslog (8,dummy,value). Системные вызовы syslog (type,dummy,idummy)приусловии,что type равно 6-и или 7-и, устанавливают это значение равным единице (только при критических сообщениях ядра) или 7-и (при всех сообщениях, кроме отладочных) соответственно. Каждая строка текста в сообщении имеет свой уровень. Этот уровень равен DEFAULT_MESSAGE_LOGLEVEL - 1 (6), если только строка не начинается с <d>, где d - это цифра в диапазоне от единицы до 7-и: в этом случае уровень равен d. Значения уровня заданы в <linux/kernel.h> следующим образом:

    #define KERN_EMERG    "<0>"  /* система не пригодна к использованию */
    #define KERN_ALERT    "<1>"  /* необходимо немедленно принять меры   */
    #define KERN_CRIT     "<2>"  /* критическая ошибка                   */
    #define KERN_ERR      "<3>"  /* ошибка                               */
    #define KERN_WARNING  "<4>"  /* предупреждение                       */
    #define KERN_NOTICE   "<5>"  /* обычное, но важное событие           */
    #define KERN_INFO     "<6>"  /* информационное сообщение             */
    #define KERN_DEBUG    "<7>"  /* отладочное сообщение                 */
    
     

    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ

    При удачном завершении, если type равен 2-м,3-м или 4-м, функция возвращает количество прочитанных байтов или 0 в ином случае. При ошибке возвращается -1, а переменной errno присваивается номер ошибки.  

    НАЙДЕННЫЕ ОШИБКИ

    EPERM
    Процесс, не имеющий прав суперпользователя, пытался изменить console_loglevel или очистить кольцевой буфер сообщений ядра.
    EINVAL
    Неправильные параметры.
    ERESTARTSYS
    Системный вызов был прерван сигналом, и ничего не было прочитано. (Может быть замечено только при трассировке.)
     

    СООТВЕТСТВИЕ СТАНДАРТАМ

    Этот системный вызов предназначен только для работы в Linux.  

    ЗАМЕЧАНИЯ

    С самого начала многим не нравилось то, что вызов ядра и библиотечная функция, имеющие одинаковые имена, делают совершенно разные вещи. В libc4 и libc5 номер этого вызова определялся как SYS_klog. В glibc 2.0 он получил имя klogctl.

     

    СМ. ТАКЖЕ

    syslog(3)


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
    НАЙДЕННЫЕ ОШИБКИ
    СООТВЕТСТВИЕ СТАНДАРТАМ
    ЗАМЕЧАНИЯ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру