Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

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

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/klog.h>        /* определения констант SYSLOG_* */
       #include <sys/syscall.h>     /* определения констант SYS_* */
       #include <unistd.h>

       int syscall(SYS_syslog, int type, char *bufp, int len);

       /* интерфейс glibc */
       #include <sys/klog.h>

       int klogctl(int type, char *bufp, int len);

ОПИСАНИЕ

       Замечание: Вероятно,  вы  ищете  библиотечную  функцию  Си  syslog(),  которая  описана  в
       syslogd(8); подробности смотрите в syslog(3).

       В этой странице описана системный вызов ядра syslog(), который используется для управления
       буфером printk() в ядре; обёрточная функция glibc для данного системного вызова называется
       klogctl().

   Буфер журнала ядра
       The  kernel has a cyclic buffer of length LOG_BUF_LEN in which messages given as arguments
       to the kernel function printk()  are stored (regardless of their  log  level).   In  early
       kernels,  LOG_BUF_LEN  had  the  value  4096;  from  Linux 1.3.54, it was 8192; from Linux
       2.1.113, it was 16384; since Linux 2.4.23/2.6, the value is a kernel configuration  option
       (CONFIG_LOG_BUF_SHIFT,  default  value dependent on the architecture).  Since Linux 2.6.6,
       the size can be queried with command type 10 (see below).

   Команды
       В аргументе type задаётся действие функции. Далее приводится список  со  всеми  значениями
       type.  Символические  имена  определены  в  исходном  коде  ядра,  но  не экспортируются в
       пользовательское пространство; вы должны использовать или  номера,  или  определить  имена
       самостоятельно.

       SYSLOG_ACTION_CLOSE (0)
              Закрыть журнал. Ничего не делает.

       SYSLOG_ACTION_OPEN (1)
              Открыть журнал. Ничего не делает.

       SYSLOG_ACTION_READ (2)
              Читать  из  журнала. Вызов ждёт пока в буфере журнала ядра что-нибудь не появится и
              затем записывает максимум len  байт  в  буфер,  указанный  bufp.  Вызов  возвращает
              количество  прочитанных  байт.  Байты,  прочитанные  из журнала, исчезают из буфера
              журнала: информацию можно прочесть только один раз. Эта функция используется  ядром
              когда пользовательская программа читает файл /proc/kmsg.

       SYSLOG_ACTION_READ_ALL (3)
              Читать  все сообщения, оставшиеся в кольцевом буфере, помещая их в буфер, указанный
              в bufp. Вызов читает последние len байт из буфера журнала (не разрушая его), но  не
              больше,  чем  было  записано  в  буфер с момента вызова команды «очистка кольцевого
              буфера» (смотрите команду 5 далее). Вызов возвращает количество прочитанных байт.

       SYSLOG_ACTION_READ_CLEAR (4)
              Прочитать и стереть все сообщения, оставшиеся в кольцевом буфере.  Вызов  выполняет
              то  же самое, что и  при type равном 3, но ещё вызывает команду «очистка кольцевого
              буфера».

       SYSLOG_ACTION_CLEAR (5)
              Вызов просто исполняет команду «очистка кольцевого буфера». Аргументы  bufp  и  len
              игнорируются.

              Эта  команда  на  самом  деле не очищает кольцевой буфер. Вместо этого она изменяет
              переменную учёта в ядре, которая определяет  результат,  возвращаемый  командами  3
              (SYSLOG_ACTION_READ_ALL)   и 4 (SYSLOG_ACTION_READ_CLEAR). Эта команда не влияет на
              команды 2 (SYSLOG_ACTION_READ) и 9 (SYSLOG_ACTION_SIZE_UNREAD).

       SYSLOG_ACTION_CONSOLE_OFF (6)
              Данная команда сохраняет текущее значение console_loglevel  и  затем  устанавливает
              console_loglevel  равным minimum_console_loglevel, что приводит к отключению вывода
              сообщений на консоль. До Linux 2.6.32, эта команда просто изменяла console_loglevel
              на minimum_console_loglevel.  Смотрите описание /proc/sys/kernel/printk далее.

              Аргументы bufp и len игнорируются.

       SYSLOG_ACTION_CONSOLE_ON (7)
              Если   ранее   выполнялась   команда   SYSLOG_ACTION_CONSOLE_OFF,  то  эта  команда
              восстанавливает значение console_loglevel, которое было сохранено. До Linux  2.6.32
              эта  команда просто изменяла console_loglevel на default_console_loglevel. Смотрите
              описание /proc/sys/kernel/printk ниже.

              Аргументы bufp и len игнорируются.

       SYSLOG_ACTION_CONSOLE_LEVEL (8)
              Вызов присваивает console_loglevel значение, указанное в len, которое  должно  быть
              целым  числом  от  1 до 8 (включительно). Ядро неявно изменяет минимальное значение
              minimum_console_loglevel  на  len.   Подробности   смотрите   в   разделе   Уровень
              протоколирования. Аргумент bufp игнорируется.

       SYSLOG_ACTION_SIZE_UNREAD (9) (начиная с Linux 2.4.10)
              Вызов  возвращает  количество  байт,  доступных  для  чтения из буфера журнала ядра
              командой 2 (SYSLOG_ACTION_READ). Аргументы bufp и len игнорируются.

       SYSLOG_ACTION_SIZE_BUFFER (10) (начиная с Linux 2.6.6)
              Эта команда возвращает полный размер буфера журнала  ядра.  Аргументы  bufp  и  len
              игнорируются.

       All  commands  except  3  and 10 require privilege.  In Linux kernels before Linux 2.6.37,
       command types 3 and 10 are allowed to unprivileged processes; since  Linux  2.6.37,  these
       commands are allowed to unprivileged processes only if /proc/sys/kernel/dmesg_restrict has
       the  value  0.   Before  Linux  2.6.37,  "privileged"  means  that  the  caller  has   the
       CAP_SYS_ADMIN  capability.   Since  Linux  2.6.37,  "privileged" means that the caller has
       either the CAP_SYS_ADMIN capability  (now  deprecated  for  this  purpose)  or  the  (new)
       CAP_SYSLOG capability.

   /proc/sys/kernel/printk
       Файл  /proc/sys/kernel/printk  доступен  на  запись  и  содержит 4 целочисленных значения,
       которыми управляется поведение ядерного printk() при печати или протоколировании сообщений
       об ошибках. Четыре значения:

       console_loglevel
              Only  messages  with  a  log  level  lower  than  this value will be printed to the
              console.  The default value for this field is DEFAULT_CONSOLE_LOGLEVEL (7), but  it
              is  set to 4 if the kernel command line contains the word "quiet", 10 if the kernel
              command line contains the word "debug", and to 15 in case of a kernel fault (the 10
              and  15 are just silly, and equivalent to 8).  The value of console_loglevel can be
              set (to a value in the range 1–8) by a syslog()  call with a type of 8.

       default_message_loglevel
              Это значение будет использовано как уровень протоколирования сообщений printk(),  у
              которых  уровень  не указан. До версии Linux 2.6.38 включительно это поле содержало
              неизменяемое значение  4  (KERN_WARNING);  начиная  с  Linux  2.6.39,  значение  по
              умолчанию  задаётся в параметре настройки ядра CONFIG_DEFAULT_MESSAGE_LOGLEVEL и по
              умолчанию равно 4.

       minimum_console_loglevel
              Значение  этого  поля  —  минимальное  значение,  которое  может  быть  указано   в
              console_loglevel.

       default_console_loglevel
              Это значение по умолчанию для console_loglevel.

   Уровень протоколирования
       Каждое   сообщение   printk()   имеет   свой   уровень   протоколирования.   Если  уровень
       протоколирования   явно   не   задан   в   сообщении,   то   по   умолчанию   оно    равно
       default_message_loglevel. Для удобства имеются следующие уровни протоколирования:

       Ядерные постоянные   Уровень   Смысл
       KERN_EMERG              0      Система не пригодна к использованию
       KERN_ALERT              1      Необходимо немедленно принять меры
       KERN_CRIT               2      Условная паника
       KERN_ERR                3      Условные ошибки
       KERN_WARNING            4      Условные предупреждения
       KERN_NOTICE             5      Обычное, но важное условие
       KERN_INFO               6      Информационное сообщение
       KERN_DEBUG              7      Cообщения уровня отладки

       Ядерная  процедура  printk()  печатает  сообщение  на  консоль  только,  если  его уровень
       протоколирования меньше значения console_loglevel.

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

       При успешном выполнении и если type равно 2,  3  или  4,  syslog()  возвращает  количество
       прочитанных  байт.  При  type равном 9, syslog() возвращает количество байт, доступных для
       чтения из кольцевого буфера ядра. При type равном 10, syslog()  возвращает  полный  размер
       кольцевого буфера ядра. При других значениях type и успешном выполнении возвращается 0.

       При ошибке возвращается -1, а переменной errno присваивается номер ошибки.

ОШИБКИ

       EINVAL Неправильные  значения  параметров  (например, некорректное значение type; при type
              равном 2, 3,  4, значение buf равно NULL или значение len  меньше  нуля;  при  type
              равном 8, значение level лежит вне диапазона от 1 до 8).

       ENOSYS Системный  вызов  syslog()  недоступен,  так  как  ядро  было собрано с отключённым
              параметром CONFIG_PRINTK.

       EPERM  Процесс, не  имеющий  необходимых  прав  (мандата  CAP_SYS_ADMIN  или  CAP_SYSLOG),
              пытался изменить console_loglevel или очистить кольцевой буфер сообщений ядра.

       ERESTARTSYS
              Системный вызов был прерван сигналом; ничего не было прочитано (может быть замечено
              только при трассировке).

СТАНДАРТЫ

       Данный системный вызов существует только в Linux и не  должен  использоваться  переносимых
       программах.

ЗАМЕЧАНИЯ

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

СМ. ТАКЖЕ

       dmesg(1), syslog(3), capabilities(7)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства    был    сделан    Alexander    Golubev
       <fatzer2@gmail.com>,   Azamat   Hackimov  <azamat.hackimov@gmail.com>,  Hotellook,  Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,    Yuri    Kozlov   <yuray@komyakino.ru>   и   Иван   Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.