Provided by: manpages-es_1.55-3_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)