#include <errno.h> // <cerrno> en C++
errno /* modifiable lvalue de type int */
La macro errno permet d'accéder à une lvalue modifiable de type int. Elle contient le code de la dernière erreur significative. Par exemple les différentes fonctions
d'accès aux fichiers peuvent théoriquement déclencher un très grand nombre d'erreurs.
Parmi les principaux codes d'erreur, nous pouvons citer :
EAGAIN (POSIX) : si on est en lecture, le descripteur de flux est marqué comme non-bloquant et aucune donnée n'est disponible pour l'instant. Il faudra retenter la lecture ultérieurement. Si on est en écriture, le flux est verrouillé et il faudra tenter ultérieurement l'écriture.
EBADF (POSIX) : le descripteur de flux (FILE *) passé en paramètre est invalide.
EDOM (C ISO) : certaines fonctions mathématiques peuvent déclencher une erreur de domaine.
EFAULT (POSIX) : un pointeur manipulé par votre programme n'adresse pas un espace mémoire valide.
EIO (POSIX) : une erreur d'accès physique au flux vient d'être générée.
ERANGE (C ISO) : la valeur, spécifiée à la fonction ayant déclenché l'erreur, n'est pas dans une plage de valeurs autorisées.
#include <stdio.h> #include <assert.h> #include <errno.h> int main( int argc, char * argv[] ) { FILE * inputFile; argc--; argv++; if ( argc == 0 ) { printf( "Usage: sample filename...\n" ); exit( 0 ); } inputFile = fopen( argv[0], "r" ); if ( inputFile == NULL ) { printf( "Cannot open file %s\n", argv[0] ); exit( 0 ); } while ( ! feof( inputFile ) ) { int theCurrentChar = fgetc( inputFile ); if ( theCurrentChar == EOF ) { if ( errno == EIO ) { fprintf( stderr, "Lecture du caractère impossible : erreur IO\n" ); } else { fprintf( stderr, "Lecture du caractère impossible : erreur inconnue" ); } } /* . . . */ } fclose( inputFile ); return 0; }
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 :