Accueil
![]() |_Accueil Langage C |_<stdio.h> |_clearerr |_fclose |_feof |_ferror |_fflush |_fgetc |_fgets |_file |_fopen |_fprintf |_fputc |_fputs |_fread |_fscanf |_fwrite |_getc |_getchar |_gets |_perror |_printf |_putc |_putchar |_puts |_remove |_rename |_scanf |_sprintf |_sscanf |_stderr |_stdin |_stdout |
Fonction freadEntête à inclure#include <stdio.h> // <cstdio> en C++ Fonction freadsize_t fread( void * buffer, size_t blocSize, size_t blocCount, FILE * stream ); Cette fonction permet de lire un certain nombre d'octets à partir d'un flux. L'ensemble des octets lu seront stockés dans un buffer passé en premier paramètre : il faut donc être certain que le buffer est bien de taille suffisante, par rapport à la taille des données demandées. Pour spécifier le nombre d'octets à lire, il faut jouer sur deux paramètres : le nombre de bloc d'octets à lire ainsi que la taille de chacun des blocs. La taille totale du buffer à allouer sera donc le produit de ces deux tailles précédentes. Paramètres
Valeur de retour
Renvoie le nombre de blocs lus (attention, cette valeur n'est pas exprimée en nombre d'octets, mais bien en nombre de blocs). Si cette valeur est
inférieure à la valeur initialement demandée, alors soit vous êtes arrivé en fin de fichier, soit une erreur de lecture vient de survenir.
Pour distinguer les deux cas vous pouvez invoquer les fonctions
Dans le cas ou une erreur viendrait de survenir, il vous faudra alors consulter la variable Codes erreurs pouvant être retournésEAGAIN : 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 ( 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. Exemple de code#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { const char * filename = "./test.data"; #define BLOCK_SIZE 24 #define BLOCK_COUNT 10 void writeFile( const char * filename ) { char buffer[ BLOCK_SIZE ]; int returnCode; int index; FILE * stream = fopen( filename, "w" ); if ( stream == NULL ) { fprintf( stderr, "Cannot open file for writing\n" ); exit( -1 ); } for( index=0; index<BLOCK_COUNT; index++ ) { int value = rand() % 1000; sprintf( buffer, "| User %3d | Pass %3d |\n", value, 999-value ); if ( 1 != fwrite( buffer, BLOCK_SIZE, 1, stream ) ) { fprintf( stderr, "Cannot write block in file\n" ); } } returnCode = fclose( stream ); if ( returnCode == EOF ) { fprintf( stderr, "Cannot close file\n" ); exit( -1 ); } } void readFile( const char * filename ) { int returnCode; int count; FILE * stream = fopen( filename, "r" ); if ( stream == NULL ) { fprintf( stderr, "Cannot open file for reading\n" ); exit( -1 ); } printf( "How many blocks to read: " ); scanf( "%d", &count ); { char buffer[ BLOCK_SIZE * count + 1]; if ( count != fread( buffer, BLOCK_SIZE, count, stream ) ) { fprintf( stderr, "Cannot read blocks in file\n" ); } buffer[ BLOCK_SIZE * count ] = '\0'; printf( buffer ); } returnCode = fclose( stream ); if ( returnCode == EOF ) { fprintf( stderr, "Cannot close file\n" ); exit( -1 ); } } int main() { srand( time( NULL ) ); writeFile( filename ); readFile( filename ); return 0; } Sujets connexes |
|
|