Namespaces
Variants

fread

From cppreference.net
< c ‎ | io
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 depuis le 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 du fichier pour le flux est avancé du nombre de caractères lus.

Si une erreur se produit, la valeur résultante de l'indicateur de position du fichier pour le flux est indéterminée. Si un élément partiel est lu, sa valeur est indéterminée.

Table des matières

Paramètres

buffer - pointeur vers le tableau où les objets lus sont stockés
size - taille de chaque objet en octets
count - nombre d'objets à lire
stream - 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 de distinction entre la fin de fichier et l'erreur, et 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/CEI 9899:2024) :
  • 7.21.8.1 La fonction fread (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.21.8.1 La fonction fread (p: 243-244)
  • Norme C11 (ISO/CEI 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

lit une entrée formatée depuis stdin , un flux de fichier ou un tampon
(fonction)
obtient une chaîne de caractères depuis un flux de fichier
(fonction)
écrit dans un fichier
(fonction)