Section: Manual del Programador de Linux (2)
Updated: 8 febrero 1998
Index Return to Main
Contents
syslog - lee o limpia el búfer del anillo de mensajes del núcleo; establece el nivel de registro de la consola
#include <unistd.h> #include <linux/unistd.h> _syscall3(int, syslog, int, tipo, char *, buf, int, lon); int syslog(int tipo, char *buf, int lon);
Probablemente no es ésta la función que le interesa. Mire syslog(3) para la interfaz de la biblioteca de C. Esta página documenta sólo la interfaz de la llamada al sistema desnuda.
El argumento tipo determina la acción tomada por syslog.
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 */
Solamente se permite la función 3 para procesos no de root.
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
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 */
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.
Esta llamada al sistema es específica de Linux y no debería emplearse en programas que se pretendan transportables.
(3)
This document was created by man2html, using
the manual pages.
Time: 06:16:21 GMT, January 22, 2005