fread
| Definiert im Header <stdio.h>
|
||
size_t fread( void* buffer, size_t size, size_t count,
FILE* stream );
|
(bis C99) | |
size_t fread( void* restrict buffer, size_t size, size_t count,
FILE* restrict stream );
|
(seit C99) | |
Liest bis zu count Objekte in das Array buffer aus dem gegebenen Eingabestrom stream, als ob fgetc size für jedes Objekt aufgerufen würde, und speichert die Ergebnisse in der erhaltenen Reihenfolge in die aufeinanderfolgenden Positionen von buffer, das als ein Array von unsigned char neu interpretiert wird. Der Dateipositionsanzeiger für den Strom wird um die Anzahl der gelesenen Zeichen weitergeschaltet.
Wenn ein Fehler auftritt, ist der resultierende Wert des Dateipositionsanzeigers für den Strom unbestimmt. Wenn ein partielles Element gelesen wird, ist sein Wert unbestimmt.
Parameter
| buffer | - | Zeiger auf das Array, in dem die gelesenen Objekte gespeichert werden |
| size | - | Größe jedes Objekts in Bytes |
| count | - | die Anzahl der zu lesenden Objekte |
| stream | - | der zu lesende Strom |
Rückgabewert
Anzahl der erfolgreich gelesenen Objekte, die kleiner als count sein kann, wenn ein Fehler oder eine Dateiende-Bedingung auftritt.
Wenn size oder count Null ist, gibt fread Null zurück und führt keine weitere Aktion aus.
fread unterscheidet nicht zwischen Dateiende und Fehler, und Aufrufer müssen feof und ferror verwenden, um festzustellen, welcher Fall eingetreten ist.
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
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
- 7.21.8.1 Die fread-Funktion (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
- 7.21.8.1 Die fread-Funktion (S.: 243-244)
- C11-Standard (ISO/IEC 9899:2011):
- 7.21.8.1 Die fread-Funktion (S.: 335)
- C99-Standard (ISO/IEC 9899:1999):
- 7.19.8.1 Die fread-Funktion (S.: 301)
- C89/C90-Standard (ISO/IEC 9899:1990):
- 4.9.8.1 Die fread-Funktion
Siehe auch
(C11)(C11)(C11) |
liest formatierte Eingabe von stdin, einem Dateistrom oder einem Puffer (Funktion) |
| erhält eine Zeichenkette aus einem Dateistrom (Funktion) | |
| schreibt in eine Datei (Funktion) | |
C++-Dokumentation für fread
| |