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

NOMBRE

       syslog,  klogctl  -  lee  o  limpia el bufer del anillo de mensajes del
       nucleo; 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'ON

       Si  necesita  la  funcion  de  libc  syslog(),  (que  se  comunica  con
       syslogd(8)),  mire  en syslog(3).  La llamada al sistema de este nombre
       explica como controlar el buffer del nucleo printk() , y la version  de
       glibc se llama klogctl().

       El argumento tipo determina la accion tomada por esta funcion.

       Extraido (y traducido) de kernel/printk.c:
       /*
        * Ordenes 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 ultimos 4kB de mensajes en el bufer del anillo
        *      4 -- Lee y limpia hasta los ultimos 4kB de mensajes en el bufer del anillo
        *      5 -- Limpia el bufer 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 numero de caracters no leidos en el buffer de registro
        */

       Solamente  se  permite  la  funcion  3  para  procesos no de root.  (La
       funcion 9 fue anadida en la version 2.4.10.)

       El b'ufer de registro del n'ucleo
       El nucleo tiene un bufer ciclico de longitud LOG_BUF_LEN  (4096,  desde
       la  version  1.3.54:  8192, desde la version 2.1.113: 16384; en nucleos
       recientes el tamano puede ser establecido en tiempo de compilacion)  en
       el  que  se  guardan  (sin  importar su nivel de registro) los mensajes
       pasados como argumento a la funcion del nucleo printk().

       La llamada syslog (2,buf,lon) espera hasta que este bufer  de  registro
       del  nucleo  no  este  vacio, y entonces lee como mucho lon bytes en el
       buffer buf. Devuelve el numero de bytes leidos. Los  bytes  leidos  del
       registro  desaparecen  del bufer de registro; la informacion solo puede
       leerse una vez.  Esta es la funcion ejecutada por el nucleo  cuando  un
       programa de usuario lee /proc/kmsg.

       La  llamada syslog (3,buf,lon) leera los ultimos lon bytes del bufer de
       registro (de forma no destructiva), pero no leera mas de lo que se haya
       escrito en el bufer desde la ultima orden 'limpiar el bufer del anillo'
       (que no limpia el bufer en  absoluto).  Devuelve  el  numero  de  bytes
       leidos.

       La  llamada syslog (4,buf,lon) hace precisamente lo mismo, pero tambien
       ejecuta la orden 'limpiar el bufer del anillo'.

       La llamada syslog (5,dummy,idummy) solo ejecuta la  orden  'limpiar  el
       bufer del anillo'.

       EL nivel de registro
       La  rutina  del  nucleo  printk()  solamente  mostrara 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 linea de ordenes del nucleo contiene la  palabra
       `debug',  y  a  15 en caso de un fallo del nucleo - los 10 y 15 son una
       tonteria, 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 o 7, lo ponen  a
       1  (solo  panicos  del  nucleo)  o a 7 (todos los mensajes salvo los de
       depuracion), respectivamente.

       Cada linea de texto en un mensaje tiene su propio  nivel  de  registro.
       Este  nivel  es  DEFAULT_MESSAGE_LOGLEVEL  - 1 (6) a menos que la linea
       comience con <d>, donde d es un digito 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> asi:

       #define KERN_EMERG    "<0>"  /* el sistema no es utilizable         */
       #define KERN_ALERT    "<1>"  /* debe tomarse una accion inmediata   */
       #define KERN_CRIT     "<2>"  /* condiciones criticas                */
       #define KERN_ERR      "<3>"  /* condiciones de error                */
       #define KERN_WARNING  "<4>"  /* condiciones de advertencia          */
       #define KERN_NOTICE   "<5>"  /* condicion normal pero significativa */
       #define KERN_INFO     "<6>"  /* informacion                         */
       #define KERN_DEBUG    "<7>"  /* mensajes del nivel de depuracion    */

VALOR DEVUELTO

       En caso de error, se devuelve -1 y se pone un valor en  errno.  Si  no,
       para  tipo  igual  a  2,  3  o  4, syslog() devuelve el numero de bytes
       leidos, y de otro modo 0.

ERRORES

       EPERM  Se ha intentado cambiar console_loglevel o limpiar el  bufer  de
              anillo de mensajes del nucleo, pero el proceso no tenia permisos
              de root.

       EINVAL Malos parametros.

       ERESTARTSYS
              La llamada al sistema ha sido interrumpida por una senal; no  se
              ha  leido  nada.   (Esto  solo  puede  ser observado durante una
              traza.)

CONFORME A

       Esta llamada al sistema es especifica de Linux y no  deberia  emplearse
       en programas que se pretendan transportables.

OBSERVACIONES

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

V'EASE TAMBI'EN

       syslog(3)