#include <errno.h> // <cerrno> en C++
int errno;
Cette variable contient le code de la dernière erreur ayant était déclenchée dans le système. Par exemple les différents fonctions d'accès aux fichiers peuvent théoriquement déclencher un très grand nombre d'erreur.
Parmis les principaux codes d'erreurs, nous pouvons citer :
EAGAIN (POSIX) : si on est en lecture, le descripteur de flux est marqué comme non-bloquant et aucune données n'est disponible pour l'instant. Il faudra retenter la lecture ultérieurement. Si on est en écriture, le flux est vérrouillé 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ée 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 :