#include <stdio.h> // <cstdio> en C++
int ferror( FILE * stream );
Vérifie si le statut d'erreur est levé pour ce flux (suite à l'utilisation d'une fonction de manipulation de flux du module
<stdio.h>
). Si une erreur a effectivement été déclenchée, une valeur non nulle vous sera retournée.
Pour de plus amples informations sur l'erreur précise rencontrée, il vous faudra ensuite interroger la valeur de la variable
globale errno
(un entier) définie dans l'entête
<errno.h>
. Il est aussi possible d'afficher le message d'erreur correspondant
en invoquant la fonction perror
.
Remarque : il est nécessaire de bien comprendre que ferror
renvoie un état de type vrai/faux. Il ne permet pas
de déterminer l'erreur constatée. D'où l'importante de consulter consécutivement l'état de la variable
errno
pour de plus amples informations sur l'erreur survenue. Mais attention, si
depuis le dernier accès au fichier, d'autres fonctions ont été invoquées, il se peut alors que la valeur de la variable
errno
est été écrasée (voir plusieurs fois).
Le statut d'erreur associé au flux considéré peut être remis à zéro en invoquant la fonction
clearerr
.
fopen
.
Si une erreur a été détectée durant l'exécution d'une fonction précédemment invoquée, ferror
reverra une value
non nulle, 0 sinon. Consulter la valeur de la variable errno
pour de plus amples
informations sur l'erreur survenue.
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.
#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 $>
La première valeur, -1, correspond au code retour de la fonction fputc
( valeur équivalente à la
macro EOF
). La seconde valeur, 1, est le résultat renvoyé par ferror
: le status d'érreur est donc
bien mis pour le flux associé à la variable myFile
. Le code erreur produit
(stocké dans la variable errno
) est donc le code 9. En voici sans définition.
#define EBADF 9 /* Bad file descriptor */
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 :