#include <stdio.h> // <cstdio> en C++
void perror( const char * prefix );
Cette fonction affiche, sur la sortie d'erreur stderr
et sous forme textuelle, le message d'erreur
associé à la variable errno
. Par défaut, la sortie d'erreur est associée à la console
mais peut être redirigée vers un fichier via la syntaxe suivante (sur la ligne de commande) :
$> progName 2> errors.txt.
Il est possible de faire précéder le message d'erreur par un texte personnalisé : pour ce faire, utilisez le paramètre de la fonction pour spécifier ce texte. Ce texte sera séparé du message d'erreur par un caractère « : ».
Remarque : il est important de demander l'affichage d'un message d'erreur le plus rapidement après sa production. Effectivement,
la quasi-totalité des fonctions de la librairie standard C peuvent produire des erreur et donc modifier le contenu de la variable
errno
. Contrairement à l'indicateur d'erreur d'un fichier spécifique, consultable via la
fonction ferror
, la variable errno
est globale et
donc unique. Si entre la production de l'erreur considérée et son affichage, d'autres fonctions sont utilisées et qu'elles plantent,
il y aura une très grande probabilité pour que le statut d'erreur errno
ait été modifié
(un autre message d'erreur sera donc produit). En général, ont gère bien ce point, du moins tant qu'un seul thread tourne dans votre
application. En cas d'exécution parallèle de plusieurs threads, il pourra être utile de rendre la production d'une erreur et son
affichage non interruptibles.
NULL
, aucun message personnalisé ne sera affiché devant
le message d'erreur produit. Si, au contraire, une chaîne de caractères est précisée, alors cette chaîne sera affichée
devant le message d'erreur, le tout séparé par un caractère « : ».
Afin de produire une erreur, nous allons ouvrir un fichier en lecture pour y écrire dedans : bien entendu, il n'y a aucune chance que cela puisse fonctionner. Puis nous en profitons pour afficher le message d'erreur produit.
#include <errno.h> #include <stdio.h> #include <stdlib.h> int main( int argc, char * argv[] ) { FILE * myFile = fopen( "anExistingFile", "r" ); int rc = fputc( '!', myFile ); printf( "Results == %d %d %d\n", rc, ferror( myFile ), errno ); perror( "My message" ); rc = fclose( myFile ); return 0; }
Le résutat produit par l'exécution de ce programme est le suivant :
$> sample Results == -1 1 9 My message: Bad file descriptor $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :