NOM
syslog, klogctl - Lire et/ou effacer les tampons circulaires de
messages du noyau.
SYNOPSIS
int syslog(int type, char *bufp, int len);
/* Pas de fonction fournie par glibc */
/* L’interface glibc */
#include <sys/klog.h>
int klogctl(int type, char *bufp, int len);
Si vous avez besoin de la fonction syslog() de la bibliothèque C (qui
communique avec syslogd(8)), voyez syslog(3). L’appel système de ce nom
contrôle le tampon printk() du noyau, et la version glibc est appelée
klogctl().
L’argument type détermine l’action effectuée par cette fonction.
Extrait de kernel/printk.c:
/*
* Commandes de sys_syslog :
*
* 0 -- Fermer le journal (actuellement NOP)
* 1 -- ouvrir le journal (actuellement NOP)
* 2 -- Lire depuis le journal
* 3 -- Lire tous les derniers messages du tampon circulaire
* 4 -- Lire et effacer tous les derniers messages du tampon circulaire
* 5 -- Vider le tampon circulaire
* 6 -- Désactiver printk sur la console
* 7 -- Activer printk sur la console
* 8 -- Indiquer le niveau des messages à afficher sur la console
* 9 -- Renvoie le nombre de caractères non lus dans le tampon
* 10 -- Renvoie la taille du tampon de journalisation
*/
Seules les commandes 3 et 10 sont permises pour les processus non
privilégiés. Le type 9 a été ajouté dans 2.4.10 ; le type 10 dans
2.6.6.
Le tampon de journalisation du noyau.
Le noyau dispose d’un tampon circulaire d’une longueur LOG_BUF_LEN dans
lequel il stocke les messages fournis en paramètre à la fonction du
noyau printk() (sans tenir compte du niveau de journalisation). Dans
les premiers noyaux, LOG_BUF_LEN avait pour valeur 4096 ; à partir du
noyau 1.3.54 elle valait 8192 ; à partir du noyau 2.1.113 elle valait
16384; depuis 2.4.23/2.6 la valeur est une option de configuration du
noyau. Dans les noyaux récent, la taille peut être demandée avec la
commande de type 10.
L’appel syslog(2,buf,len) attend que ce journal soit non vide, puis lit
au plus len octets qu’il place dans le tampon buf. Il renvoie le nombre
d’octets lus. Les octets lus sont extraits du journal : les
informations ne peuvent être lues qu’une seule fois. C’est la fonction
exécutée par le noyau quand un programme utilisateur lit /proc/kmsg.
L’appel syslog(3,buf,len) lit les len dernier octets depuis le journal
(de manière non destructive). Il ne lira pas plus que ce qui a été
écrit dans le tampon depuis la dernière commande de nettoyage (commande
« clear ring buffer », qui ne nettoie pas en fait le tampon). Il
renvoie le nombre d’octets lus.
L’appel syslog(4,buf,len) effectue la même chose puis vide le tampon
(avec la commande « clear ring buffer »).
L’appel syslog(5,dummy,dummy) vide uniquement le tampon (avec la
commande « clear ring buffer »). (Dans tous les appels pour lesquels
buf ou len est remplacé par « dummy », la valeur du paramètre est
ignoré par l’appel).
L’appel syslog(6,dummy,dummy) fixe le niveau de journalisation de la
console au minimum, de telle sorte qu’aucun message n’est affiché sur
la console.
L’appel syslog(7,dummy,dummy) fixe le niveau de journalisation de la
console à la valeur par défaut, de telle sorte que des messages soient
affichés sur la console.
L’appel syslog(8,dummy,level) fixe le niveau de journalisation de la
console à level, qui doit être un entier compris entre 1 et 8 (inclus).
Consultez la section Le niveau de journalisation (loglevel) pour plus
de détails.
L’appel syslog(9,dummy,dummy) renvoie le nombre d’octets actuellement
disponibles en lecture dans le tampon de journalisation du noyau.
L’appel syslog(10,dummy,dummy) renvoie la taille totale du tampon de
journalisation du noyau.
Le niveau de journalisation (loglevel)
La routine du noyau printk() n’écrira un message sur la console que si
celui-ci a un niveau de journalisation inférieur à la valeur de la
variable console_loglevel. Initialement la valeur de cette variable est
DEFAULT_CONSOLE_LOGLEVEL (7), mais elle est augmentée à 10 si la ligne
de commande du noyau contient le mot « debug », et à 15 si une faute du
noyau se produit (en réalité, les valeurs 10 et 15 sont idiotes et
n’apportent rien de plus que 8). Cette variable est positionnée (dans
l’intervalle 1–8) par l’appel syslog(8,dummy,value). L’appel
syslog(type,dummy,dummy) avec type égal à 6 ou 7 la positionne à 1
(seulement les messages kernel panics) ou 7 (tout sauf les messages de
débogage), respectivement.
Chaque ligne de texte dans un message a son propre niveau de
journalisation. Ce niveau est DEFAULT_MESSAGE_LOGLEVEL - 1 (6) à moins
que la ligne ne commence par <d> où d est un chiffre dans l’intervalle
1–7. La signification conventionnelle des niveaux de journalisation est
définie dans <linux/kernel.h> comme suit :
#define KERN_EMERG "<0>" /* système inutilisable */
#define KERN_ALERT "<1>" /* action à effectuer immédiatement */
#define KERN_CRIT "<2>" /* conditions critiques */
#define KERN_ERR "<3>" /* conditions d’erreurs */
#define KERN_WARNING "<4>" /* message d’avertissement */
#define KERN_NOTICE "<5>" /* normal mais significatif */
#define KERN_INFO "<6>" /* informations */
#define KERN_DEBUG "<7>" /* messages de débugging */
VALEUR RENVOYÉE
Quand type est égal à 2, 3 ou 4, un appel réussi à syslog() renvoie le
nombre d’octets lus. Pour le type 9, syslog() renvoie le nombre
d’octets disponibles actuellement en lecture dans le tampon de
journalisation du noyau. Pour le type 10, syslog() renvoie la taille
totale du tampon de journalisation du noyau. Pour les autres valeurs de
type, 0 est renvoyé en cas de succès.
En cas d’erreur, -1 est renvoyé et errno contient le code d’erreur.
ERREURS
EINVAL Mauvais paramètres (par exemple, mauvais type ; ou type égal à
2, 3 ou 4 et buf est NULL, ou len est inférieur à 0 ; ou pour
type égal à 8, le niveau level est en dehors de l’intervalle
allant de 1 à 8).
EPERM Une tentative de changer console_loglevel ou d’effacer le tampon
circulaire du noyau par un processus sans les privilèges
suffisants (plus précisément sans la capacité CAP_SYS_ADMIN).
ERESTARTSYS
L’appel système a été interrompu par un signal, et rien n’a été
lu. (Ceci ne peut être vu que pendant un suivi de processus).
ENOSYS L’appel système syslog() n’est pas disponible car le noyau a été
compilé sans que l’option CONFIG_PRINTK de configuration du
noyau n’ait été activée.
CONFORMITÉ
Cet appel système est spécifique à Linux et ne devrait pas être employé
dans des programmes destinés à être portables.
NOTES
Depuis longtemps, des gens trouvent regrettable qu’un appel système et
une routine de bibliothèque aient le même nom bien qu’ils n’aient pas
de rapport entre eux. Dans les libc4 et libc5 le numéro de cet appel
système était défini par SYS_klog. Dans la glibc 2.0, l’appel système
est nommé klogctl().
VOIR AUSSI
syslog(3)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».