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)