Fonction perror

Entête à inclure

#include <stdio.h>  // <cstdio> en C++

Fonction perror

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.

Paramètre

  • prefix : si ce paramètre est fixé à la valeur 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 « : ».

Exemple de code

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
$>

Sujets connexes