fread
| Défini dans l'en-tête <stdio.h>
|
||
size_t fread( void* buffer, size_t size, size_t count,
FILE* stream );
|
(jusqu'à C99) | |
size_t fread( void* restrict buffer, size_t size, size_t count,
FILE* restrict stream );
|
(depuis C99) | |
Lit jusqu'à count objets dans le tableau buffer à partir du flux d'entrée donné stream comme en appelant fgetc size fois pour chaque objet, et stocke les résultats, dans l'ordre obtenu, dans les positions successives de buffer, qui est réinterprété comme un tableau de unsigned char. L'indicateur de position dans le fichier du flux est avancé du nombre de caractères lus.
Si une erreur se produit, la valeur résultante de l'indicateur de position dans le fichier du flux est indéterminée. Si un élément partiel est lu, sa valeur est indéterminée.
Paramètres
| buffer | - | pointeur vers le tableau où sont stockés les objets lus |
| size | - | taille de chaque objet en octets |
| count | - | le nombre d'objets à lire |
| stream | - | le flux à lire |
Valeur de retour
Nombre d'objets lus avec succès, qui peut être inférieur à count si une erreur ou une condition de fin de fichier se produit.
Si size ou count est zéro, fread renvoie zéro et n'effectue aucune autre action.
fread ne fait pas la distinction entre fin de fichier et erreur ; les appelants doivent utiliser feof et ferror pour déterminer ce qui s'est produit.
Exemple
#include <stdio.h>
enum { SIZE = 5 };
int main(void)
{
const double a[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
printf("Array has size %ld bytes, element size: %ld\n", sizeof a, sizeof* a);
FILE* fp = fopen("test.bin", "wb"); // must use binary mode
fwrite(a, sizeof* a, SIZE, fp); // writes an array of doubles
fclose(fp);
double b[SIZE];
fp = fopen("test.bin","rb");
const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // reads an array of doubles
if (ret_code == SIZE)
{
printf("Array at %p read successfully, contents:\n", (void*)&a);
for (int n = 0; n != SIZE; ++n)
printf("%f ", b[n]);
putchar('\n');
}
else // error handling
{
if (feof(fp))
printf("Error reading test.bin: unexpected end of file\n");
else if (ferror(fp))
perror("Error reading test.bin");
}
fclose(fp);
}
Sortie possible :
Array has size 40 bytes, element size: 8
Array at 0x1337f00d6960 read successfully, contents:
1.000000 2.000000 3.000000 4.000000 5.000000
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.21.8.1 La fonction fread (p: À déterminer)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.21.8.1 La fonction fread (p: 243-244)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.21.8.1 La fonction fread (p: 335)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.19.8.1 La fonction fread (p: 301)
- Norme C89/C90 (ISO/IEC 9899:1990) :
- 4.9.8.1 La fonction fread
Voir aussi
(C11)(C11)(C11) |
lit l'entrée formatée depuis stdin, un flux fichier ou un tampon (fonction) |
| obtient une chaîne de caractères depuis un flux fichier (fonction) | |
| écrit dans un fichier (fonction) | |
Documentation C++ pour fread
| |