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);
DESCRIPTION¶
Si vous avez besoin de la fonction
syslog() de la bibliothèque C
(qui communique avec
syslogd(8)), consultez
syslog(3). L'appel
système portant ce nom contrôle le tampon
printk() du noyau,
et la fonction d'encapsulation de glibc s'appelle
klogctl().
L'argument
type détermine l'action effectuée par cette fonction
de la manière suivante :
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 -- Renvoyer le nombre de caractères non lus dans le tampon de journalisation
10 -- Renvoyer la taille du tampon de journalisation
Le type 9 a été ajouté dans Linux 2.4.10 ; le type 10 a
été ajouté dans Linux 2.6.6.
Dans les noyaux Linux précédant la version 2.6.37, seules les
commandes de type 3 à 10 étaient permises aux processus non
privilégiés. Depuis Linux 2.6.37, les commandes de type 3 et 10
sont les seules permises à ces processus si
/proc/sys/kernel/dmesg_restrict vaut 0. Avant Linux 2.6.37,
« privilégié » signifiait que le processus avait
soit la capacité
CAP_SYS_ADMIN (maintenant obsolète pour cet
usage) ou la (nouvelle) capacité
CAP_SYSLOG.
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) définit 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) définit 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) définit 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).
- 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.
- EPERM
- Un changement de console_loglevel ou un effacement du
tampon circulaire du noyau par un processus sans les privilèges
suffisants (plus précisément sans la capacité
CAP_SYS_ADMIN ou CAP_SYSLOG) a été
tenté.
- 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).
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.
VOIR AUSSI¶
syslog(3),
capabilities(7)
COLOPHON¶
Cette page fait partie de la publication 3.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».