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