Participer au site avec un Tip
Rechercher
 

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 :

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

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

clearerr
errno
ferror