#include <stdio.h> // <cstdio> en C++
int fgetc( FILE * stream );
int getc( FILE * stream );
int getchar();
Ces fonctions permettent toutes les trois de lire le caractère à la position courante du flux considéré.
La fonction getchar
impose le flux : stdin
. Pour les deux autres fonctions, le flux de caractères à utiliser
doit être spécifié en paramètre. Une fois le caractère lu, la position de la tête de lecture associé au flux considéré est décalée sur le
prochain caractère à lire.
En fait fgetc
et getc
sont identiques au détail près que sur certains compilateurs
la fonction getc
est implémentée sous forme d'une macro.
fopen
.
Soit un octet à correctement été lu, et dans ce cas sa valeur vous est retournée (entre 0 et 255), soit une erreur
c'est produite et dans ce cas la valeur EOF
vous sera retournée. Cela donne 257 valeurs différentes
pouvant être renvoyées : cela explique que le type de retour soit int
plutôt que
unsigned char
.
Si une erreur vous est retournée (code EOF
), il vous faudra alors consulter la variable
errno
pour obtenir de plus amples informations.
EAGAIN : 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.
EBADF : le descripteur de flux (FILE *
) passé en paramètre est invalide.
EINTR : la lecture sur une ressource lente a été interrompue par l'arrivée d'un signal avant que des données ne soient disponibles.
EIO : une erreur d'accès physique au flux vient d'être générée.
...
#include <stdio.h> #include <stdlib.h> int main( int argc, char * argv[] ) { argc--; argv++; if ( argc == 0 ) { printf( "Usage: sample filename\n" ); exit( 0 ); } FILE * inputFile = fopen( argv[0], "r" ); if ( inputFile == NULL ) { printf( "Cannot open file %s\n", argv[0] ); exit( -1 ); } while ( ! feof( inputFile ) ) { int theCurrentChar; printf( "Appuyez sur <ENTER> pour lire le prochain caractère du fichier"); fflush( stdin ); fgetc( stdin ); theCurrentChar = fgetc( inputFile ); printf( "Le caractère actuel est <<%c>>\n", theCurrentChar ); } fclose( inputFile ); return 0; }
Il est à noter que ce programme n'est certainement pas le plus efficace pour calculer la taille d'un fichier, mais il
est proposé à titre d'exemple d'utilisation de la fonction feof
.
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 :