Provided by: manpages-es_1.55-10_all bug

NOMBRE

       syslog, klogctl - lee o limpia el búfer del anillo de mensajes del núcleo; establece el nivel de registro
       de la consola

SINOPSIS

       /* La interfaz glibc */
       #include <sys/klog.h>

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

       /* La llamada al sistema desnuda */
       #include <unistd.h>
       #include <linux/unistd.h>

       _syscall3(int, syslog, int, type, char *, bufp, int, len);

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

DESCRIPCIÓN

       Si necesita la función de libc syslog(), (que se comunica con syslogd(8)), mire en syslog(3).  La llamada
       al sistema de este nombre explica cómo controlar el buffer del núcleo printk() , y la versión de glibc se
       llama klogctl().

       El argumento tipo determina la acción tomada por esta función.

       Extraído (y traducido) de kernel/printk.c:
       /*
        * Órdenes a sys_syslog:
        *
        *      0 -- Cierra el registro. Actualmente no hace nada.
        *      1 -- Abre el registro. Actualmente no hace nada.
        *      2 -- Lee del registro.
        *      3 -- Lee hasta los últimos 4kB de mensajes en el búfer del anillo
        *      4 -- Lee y limpia hasta los últimos 4kB de mensajes en el búfer del anillo
        *      5 -- Limpia el búfer del anillo
        *      6 -- Desactiva los printk's a consola
        *      7 -- Activa los printk's a consola
        *      8 -- Establece el nivel de mensajes mostrados en la consola
        *      9 -- Devuelve el número de carácters no leídos en el buffer de registro
        */

       Solamente  se  permite  la  función  3 para procesos no de root.  (La función 9 fue añadida en la versión
       2.4.10.)

       El búfer de registro del núcleo
       El núcleo tiene un búfer cíclico de longitud LOG_BUF_LEN (4096, desde la versión 1.3.54: 8192,  desde  la
       versión 2.1.113: 16384; en núcleos recientes el tamaño puede ser establecido en tiempo de compilación) en
       el  que  se  guardan (sin importar su nivel de registro) los mensajes pasados como argumento a la función
       del núcleo printk().

       La llamada syslog (2,buf,lon) espera hasta que este búfer  de  registro  del  núcleo  no  esté  vacío,  y
       entonces  lee como mucho lon bytes en el búffer buf. Devuelve el número de bytes leídos. Los bytes leídos
       del registro desaparecen del búfer de registro; la información sólo puede leerse una  vez.   Esta  es  la
       función ejecutada por el núcleo cuando un programa de usuario lee /proc/kmsg.

       La  llamada  syslog  (3,buf,lon)  leerá  los  últimos  lon  bytes  del  búfer  de  registro  (de forma no
       destructiva), pero no leerá más de lo que se haya escrito en el búfer desde la última orden  'limpiar  el
       búfer del anillo' (que no limpia el búfer en absoluto). Devuelve el número de bytes leídos.

       La llamada syslog (4,buf,lon) hace precisamente lo mismo, pero también ejecuta la orden 'limpiar el búfer
       del anillo'.

       La llamada syslog (5,dummy,idummy) sólo ejecuta la orden 'limpiar el búfer del anillo'.

       EL nivel de registro
       La  rutina del núcleo printk() solamente mostrará un mensaje en la consola, si tiene un nivel de registro
       menor que el valor de la  variable  console_loglevel  (inicialmente  DEFAULT_CONSOLE_LOGLEVEL  (7),  pero
       puesto a 10 si la línea de órdenes del núcleo contiene la palabra `debug', y a 15 en caso de un fallo del
       núcleo  - los 10 y 15 son una tontería, y equivalen a 8).  Esta variable es establecida (a un valor en el
       rango de     1 a 8) por la llamada syslog (8,dummy,value).  Las llamadas syslog  (tipo,dummy,idummy)  con
       tipo  igual  a  6  ó  7,  lo  ponen  a 1 (sólo pánicos del núcleo) o a 7 (todos los mensajes salvo los de
       depuración), respectivamente.

       Cada  línea  de  texto  en  un  mensaje  tiene   su   propio   nivel   de   registro.   Este   nivel   es
       DEFAULT_MESSAGE_LOGLEVEL  - 1 (6) a menos que la línea comience con <d>, donde d es un dígito en el rango
       de 1 a 7, en cuyo caso el nivel es d. El significado convencional del nivel  de  registro  se  define  en
       <linux/kernel.h> así:

       #define KERN_EMERG    "<0>"  /* el sistema no es utilizable         */
       #define KERN_ALERT    "<1>"  /* debe tomarse una acción inmediata   */
       #define KERN_CRIT     "<2>"  /* condiciones críticas                */
       #define KERN_ERR      "<3>"  /* condiciones de error                */
       #define KERN_WARNING  "<4>"  /* condiciones de advertencia          */
       #define KERN_NOTICE   "<5>"  /* condición normal pero significativa */
       #define KERN_INFO     "<6>"  /* información                         */
       #define KERN_DEBUG    "<7>"  /* mensajes del nivel de depuración    */

VALOR DEVUELTO

       En caso de error, se devuelve -1 y se pone un valor en errno. Si no, para tipo igual a 2, 3 ó 4, syslog()
       devuelve el número de bytes leídos, y de otro modo 0.

ERRORES

       EPERM  Se ha intentado cambiar console_loglevel o limpiar el búfer de anillo de mensajes del núcleo, pero
              el proceso no tenía permisos de root.

       EINVAL Malos parámetros.

       ERESTARTSYS
              La  llamada  al sistema ha sido interrumpida por una señal; no se ha leído nada.  (Ésto sólo puede
              ser observado durante una traza.)

CONFORME A

       Esta llamada al sistema es específica de Linux y no debería  emplearse  en  programas  que  se  pretendan
       transportables.

OBSERVACIONES

       Desde  muy  temprano  la  gente  se dio cuenta de que resulta desafortunado que la llamada al núcleo y la
       rutina de biblioteca del mismo nombre sean completamente diferentes.  En libc4 y libc5 el número de  esta
       llamada estaba definido por SYS_klog.  En glibc 2.0 la llamada al sistema está bautizada como klogctl.

VÉASE TAMBIÉN

       syslog(3)

Linux 1.2.9                                     25 noviembre 2001                                      SYSLOG(2)