fmtmsg
Section: C Library Functions (3)
Updated: 5 février 2023
Index
Return to Main Contents
NOM
fmtmsg - Afficher des messages d'erreur formatés
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <fmtmsg.h>
int fmtmsg(long classification, const char *étiquette,
int sévérité, const char *texte,
const char *action, const char *ancre);
DESCRIPTION
Cette fonction affiche un message décrit par ses arguments sur le(s)
périphérique(s) spécifié(s) par le paramètre classification. Pour les
messages écrits sur stderr, le format dépend de la variable
d'environnement MSGVERB.
Le paramètre étiquette identifie la source du message. La chaîne doit
être composée de deux parties séparées par le caractère deux-points « : »,
où la première partie ne comporte pas plus de 10 caractères et la seconde,
pas plus de 14.
Le paramètre texte décrit la condition de l'erreur.
Le paramètre action décrit les étapes possibles pour échapper à
l'erreur. Si elle est affichée, elle sera préfixée par «TO FIX: ».
Le paramètre ancre est une référence à la documentation en ligne où l'on
pourra trouver plus d'informations. Il devrait contenir la valeur
étiquette et un numéro d'identification unique.
Paramètres factices
Chacun des paramètres peut avoir une valeur factice. La valeur de
classification factice MM_NULLMC (0L) ne spécifie aucune sortie, ainsi,
rien n'est affiché. La valeur de sévérité factice NO_SEV (0) signifie
qu'aucune sévérité n'est fournie. Les valeurs MM_NULLLBL, MM_NULLTXT,
MM_NULLACT et MM_NULLTAG sont des synonymes de ((char *) 0), la
chaîne vide et MM_NULLSEV sont un synonyme de NO_SEV.
Le paramètre classification
Le paramètre classification est la somme des valeurs décrivant 4 types
d'informations.
La première valeur définit le canal de sortie.
- MM_PRINT
-
Sortie sur stderr.
- MM_CONSOLE
-
Sortie sur la console du système.
- MM_PRINT | MM_CONSOLE
-
Sortie sur les deux.
La deuxième valeur est la source de l'erreur :
- MM_HARD
-
Une erreur matérielle est survenue.
- MM_FIRM
-
Une erreur de micrologiciel (« firmware ») est survenue.
- MM_SOFT
-
Une erreur logicielle est survenue.
La troisième valeur encode le détecteur du problème :
- MM_APPL
-
L'erreur a été détectée par une application.
- MM_UTIL
-
L'erreur a été détectée par un utilitaire.
- MM_OPSYS
-
L'erreur a été détectée par le système d'exploitation.
La quatrième valeur indique la gravité de l'incident :
- MM_RECOVER
-
L'erreur est récupérable.
- MM_NRECOV
-
L'erreur n'est pas récupérable.
Le paramètre sévérité
Le paramètre sévérité peut prendre l'une des valeurs suivantes :
- MM_NOSEV
-
Aucune sévérité ne sera affichée.
- MM_HALT
-
Cette valeur est affichée en tant que HALT.
- MM_ERROR
-
Cette valeur est affichée en tant que ERROR.
- MM_WARNING
-
Cette valeur est affichée en tant que WARNING.
- MM_INFO
-
Cette valeur est affichée en tant que INFO.
Les valeurs numériques sont comprises entre 0 et 4. L'utilisation de
addseverity(3) ou de la variable d'environnement SEV_LEVEL vous permet
d'ajouter plus de niveaux et d'afficher plus de messages.
VALEUR RENVOYÉE
La fonction peut retourner quatre valeurs :
- MM_OK
-
Tout s'est bien passé.
- MM_NOTOK
-
Échec complet.
- MM_NOMSG
-
Erreur lors de l'écriture sur stderr.
- MM_NOCON
-
Erreur lors de l'écriture sur la console.
ENVIRONNEMENT
La variable d'environnement MSGVERB (« verbosité du message ») peut
être utilisée pour supprimer des parties de la sortie vers stderr (cela
n'a pas d'influence sur la sortie vers la console). Lorsque cette variable
est définie, qu'elle est non vide et qu’elle est une liste de mots clés
autorisés séparés par le caractère deux-points, seules les parties du
message correspondant à ces mots clés seront affichées. Les mots-clés
autorisés sont « label » pour l'étiquette, « severity » pour la
sévérité, « text » pour le texte, « action » et « tag » pour l'ancre.
La variable d'environnement SEV_LEVEL peut être utilisée afin
d'introduire de nouveaux niveaux de sévérité. Par défaut, seuls les cinq
niveaux de sévérité décrits précédemment sont disponibles. Toute autre
valeur numérique fera que la fonction fmtmsg() n'affichera rien. Si
l'utilisateur positionne SEV_LEVEL avec un format comme
-
SEV_LEVEL=[description[:description[:...]]]
dans l'environnement du processus avant le premier appel à fmtmsg() où
chaque description est de la forme
-
sévérité, niveau, chaîne
alors fmtmsg() acceptera également les valeurs indiquées pour le niveau
(en plus des niveaux standard 0-4), et utilisera la chaîne indiquée
lorsqu'un tel niveau surviendra.
La partie « sévérité » n'est pas utilisée par fmtmsg() mais elle doit
être présente. La partie « niveau » est la représentation alphabétique
d'un nombre. La valeur numérique doit être un nombre strictement supérieur
à 4. Cette valeur doit être utilisée dans le paramètre « sévérité » de
fmtmsg() pour sélectionner cette classe. Il n'est pas possible de
surcharger les classes prédéfinies. La partie « chaîne » est la chaîne qui
sera affichée lorsqu'un message de cette classe est traité par fmtmsg().
VERSIONS
fmtmsg() est fournie depuis la glibc 2.1.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface | Attribut | Valeur
|
fmtmsg()
| Sécurité des threads |
glibc >= 2.16: MT-Safe;
glibc < 2.16: MT-Unsafe
|
Avant la glibc 2.16, la fonction fmtmsg() utilisait une variable statique
non protégée, et n’était donc pas sûre dans un contexte multithread.
Depuis glibc 2.16, la fonction fmtmsg() utilise un verrou de protection
de la variable statique, donc elle est sûre dans un contexte multithread.
STANDARDS
Les fonctions fmtmsg() et addseverity(3) ainsi que les variables
d'environnement MSGVERB et SEV_LEVEL proviennent de System V.
La fonction fmtmsg() et la variable d'environnement MSGVERB sont
conformes à POSIX.1-2001 et POSIX.1-2008.
NOTES
Les pages de manuel System V et UnixWare disent que ces fonctions ont été
remplacées par « pfmt() » et « addsev() » ou par « pfmt() », « vpfmt() »,
« lfmt() » et « vlfmt() » et seront supprimées par la suite.
EXEMPLES
#include <fmtmsg.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
long class = MM_PRINT | MM_SOFT | MM_OPSYS | MM_RECOVER;
int err;
err = fmtmsg(class, "util-linux : mount", MM_ERROR,
"option de montage inconnue", "Consultez mount(8).",
"util-linux : mount : 017");
switch (err) {
case MM_OK:
break;
case MM_NOTOK:
printf("Rien à afficher\n");
break;
case MM_NOMSG:
printf("Rien à afficher sur stderr\n");
break;
case MM_NOCON:
printf("Pas de sortie sur la console\n");
break;
default:
printf("Erreur inconnue de fmtmsg()\n");
}
exit(EXIT_SUCCESS);
}
La sortie devrait être :
util-linux : mount : ERROR : option de montage inconnue
TO FIX : consultez mount(8). util-linux : mount : 017
et après
MSGVERB=text:action; export MSGVERB
la sortie devient :
option de montage inconnue
TO FIX : consultez mount(8).
VOIR AUSSI
addseverity(3), perror(3)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>,
Frédéric Hantrais <fhantrais@gmail.com>
et
Grégoire Scano <gregoire.scano@malloc.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- Paramètres factices
-
- Le paramètre classification
-
- Le paramètre sévérité
-
- VALEUR RENVOYÉE
-
- ENVIRONNEMENT
-
- VERSIONS
-
- ATTRIBUTS
-
- STANDARDS
-
- NOTES
-
- EXEMPLES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:04:27 GMT, May 18, 2024