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 :

Variable errno

La macro ERANGE


Entête à  inclure

#include <errno.h>  // <cerrno> en C++

Variable errno

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.

Tous les codes erreurs présentés ci-dessus ne font pas partie du standard C ISO : certains proviennent de l'interface POSIX. POSIX (Portable Operating System Inteface for uniX) est une interface de programmation système définissant les principales fonctions d'un système Unix/Linux.
Vous pouvez obtenir le message d'erreur textuel associé à un code d'erreur en invoquant la fonction strerror.

Exemple de code

#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;
}

Sujets connexes

EDOM
EILSEQ
ERANGE
strerror


La macro ERANGE