#include <fmtmsg.h> int fmtmsg(long classification, const char *label, int severity,
const char *text, const char *action, const char *tag);
Le paramètre label identifie la source du message. La chaîne doit être composée en 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 text décrit la condition de l'erreur.
Le paramètre action décrit les étapes possibles pour récupérer l'erreur. Si elle est affichée, elle sera préfixée par « TO FIX: ».
Le paramètre tag est une référence à la documentation en ligne où l'on pourra trouver plus d'informations. Il devrait contenir la valeur label et un numéro d'identification unique.
La première valeur définit le canal de sortie.
La deuxième valeur est la source de l'erreur :
La troisième valeur encode le détecteur du problème :
La quatrième valeur indique la gravité de l'incident :
Les valeurs numériques sont prises entre 0 et 4. Utiliser addseverity(3) ou la variable d'environnement SEV_LEVEL vous permet d'ajouter d'autres niveaux et messages à afficher.
La variable d'environnement SEV_LEVEL peut être utilisée afin d'introduire de nouveaux niveaux de gravité. 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 fmtmsg() n'affichera rien. Si l'utilisateur positionne SEV_LEVEL avec un format comme
dans l'environnement du processus avant le premier appel à fmtmsg(), où chaque description est de la forme
alors fmtmsg() acceptera également les valeurs indiquées pour le niveau (en plus des niveaux standard 0-4), et utilisera la chaîne à afficher (printstring) indiquée lorsqu'un tel niveau surviendra.
La partie « severity-keyword » n'est pas utilisée par fmtmsg() mais doit être présente. La partie « level » 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 « severity » de fmtmsg() pour sélectionner cette classe. Il n'est pas possible de surcharger les classes prédéfinies. La partie « printstring » est la chaîne qui sera affichée lorsqu'un message de cette classe est traité par fmtmsg().
#include <stdio.h> #include <stdlib.h> #include <fmtmsg.h> int main(void) { long class = MM_PRINT | MM_SOFT | MM_OPSYS | MM_RECOVER; int err; err = fmtmsg(class, "util-linux:mount", MM_ERROR, "unknown mount option", "See mount(8).", "util-linux:mount:017"); switch (err) { case MM_OK: break; case MM_NOTOK: printf("Nothing printed\n"); break; case MM_NOMSG: printf("Nothing printed to stderr\n"); break; case MM_NOCON: printf("No console output\n"); break; default: printf("Unknown error from fmtmsg()\n"); } exit(EXIT_SUCCESS); }
La sortie devrait être :
util-linux:mount: ERROR: unknown mount option TO FIX: See mount(8). util-linux:mount:017et après
MSGVERB=text:action; export MSGVERBla sortie devient :
unknown mount option TO FIX: See mount(8).
Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 4 juillet 2005 et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 fmtmsg ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 17 juillet 2008