Namensräume
Varianten
Aktionen

fread

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
fread
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <stdio.h>
size_t fread( void          *Puffer, size_t Größe, size_t Anzahl,
              FILE          *Strom );
(bis C99)
size_t fread( void *restrict Puffer, size_t Größe, size_t Anzahl,
              FILE *restrict Strom );
(seit C99)

Liest bis zu Anzahl Objekte in das Array Puffer aus dem gegebenen Eingabestrom Strom, als ob durch Aufruf von fgetc Größe Mal für jedes Objekt, und speichert die Ergebnisse in der erhaltenen Reihenfolge in den aufeinanderfolgenden Positionen von Puffer, der als Array von unsigned char neu interpretiert wird. Der Dateipositionierungsanzeiger für den Strom wird um die Anzahl der gelesenen Zeichen vorgerückt.

Wenn ein Fehler auftritt, ist der resultierende Wert des Dateipositionierungsanzeigers für den Strom unbestimmt. Wenn ein Teil eines Elements gelesen wird, ist dessen Wert unbestimmt.

Inhalt

[edit] Parameter

buffer - Zeiger auf das Array, in dem die gelesenen Objekte gespeichert werden
size - Größe jedes Objekts in Bytes
zählt - die Anzahl der zu lesenden Objekte
stream - der zu lesende Strom

[edit] Rückgabewert

Anzahl der erfolgreich gelesenen Objekte, die kleiner als Anzahl sein kann, wenn ein Fehler oder eine End-of-File-Bedingung auftritt.

Wenn Größe oder Anzahl null ist, gibt fread null zurück und führt keine weiteren Aktionen aus.

fread unterscheidet nicht zwischen End-of-File und Fehler, und Aufrufer müssen feof und ferror verwenden, um festzustellen, welches aufgetreten ist.

[edit] Beispiel

#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);
}

Mögliche Ausgabe

Array has size 40 bytes, element size: 8
Array at 0x1337f00d6960 read successfully, contents:
1.000000 2.000000 3.000000 4.000000 5.000000

[edit] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.21.8.1 Die Funktion fread (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.21.8.1 Die Funktion fread (p: 243-244)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.21.8.1 Die Funktion fread (p: 335)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.19.8.1 Die Funktion fread (p: 301)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.9.8.1 Die Funktion fread

[edit] Siehe auch

liest formatierte Eingaben aus stdin, einem Dateistream oder einem Puffer
(Funktion) [bearbeiten]
liest einen Zeichenstring aus einem Dateistream
(Funktion) [bearbeiten]
schreibt in eine Datei
(Funktion) [edit]