fread, fwrite - Ein-/Ausgabe binärer Datenströme
Standard-C-Bibliothek (
libc,
-lc)
#include <stdio.h>
size_t fread(void zeiger[restrict .groesse * .nmemb],
size_t groesse, size_t nmemb,
FILE *restrict datenstrom);
size_t fwrite(const void ptr[restrict .groesse * .nmemb],
size_t groesse, size_t nmemb,
FILE *restrict datenstrom);
Die Funktion
fread() liest
nmemb Datenelemente, jeweils
groesse Byte lang, vom Datenstrom, auf den
datenstrom zeigt, und
speichert sie an der Position, die
zeiger angibt.
Die Funktion
fwrite() schreibt
nmemb Datenelemente, jeweils
groesse Byte lang, in den Datenstrom, auf den
datenstrom zeigt.
Diese stammen von der Position, die
zeiger angibt.
Für nicht sperrende Gegenstücke siehe
unlocked_stdio(3).
Bei Erfolg geben
fread() und
fwrite() die Anzahl der geschriebenen
oder gelesenen Elemente zurück. Diese Zahl ist nur gleich der Anzahl
der übertragenen Byte, wenn
groesse 1 ist. Falls ein Fehler
auftritt oder das Dateiende erreicht ist, wird eine kleinere Zahl von
gelesenen Elementen (oder Null) zurückgegeben.
Der Dateipositionsanzeiger für den Datenstrom wird um die Anzahl der
erfolgreich gelesenen oder geschriebenen Bytes vorwärtsbewegt.
fread() unterscheidet nicht zwischen Dateiende und Fehler, der Aufrufende
muss
feof(3) bzw.
ferror(3) benutzen, um herauszufinden was
passiert ist.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
fread(), fwrite() |
Multithread-Fähigkeit |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99.
Das nachfolgende Programm stellt die Verwendung von
fread() dar, indem es
ein /bin/sh-ELF-Programm im binären Modus auswertet und dessen Magie
und Klasse ausgibt:
$ ./a.out
ELF-Magie: 0x7f454c46
Klasse: 0x02
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int
main(void)
{
FILE *fp;
size_t ret;
unsigned char buffer[4];
fp = fopen("/bin/sh", "rb");
if (!fp) {
perror("fopen");
return EXIT_FAILURE;
}
ret = fread(buffer, sizeof(*buffer), ARRAY_SIZE(buffer), fp);
if (ret != ARRAY_SIZE(buffer)) {
fprintf(stderr, "fread() fehlgeschlagen: %zu\n", ret);
exit(EXIT_FAILURE);
}
printf("ELF-Magie: %#04x%02x%02x%02x\n", buffer[0], buffer[1],
buffer[2], buffer[3]);
ret = fread(buffer, 1, 1, fp);
if (ret != 1) {
fprintf(stderr, "fread() fehlgeschlagen: %zu\n", ret);
exit(EXIT_FAILURE);
}
printf("Klasse: %#04x\n", buffer[0]);
fclose(fp);
exit(EXIT_SUCCESS);
}
read(2),
write(2),
feof(3),
ferror(3),
unlocked_stdio(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze
<
[email protected]>, Chris Leick <
[email protected]> und Helge
Kreutzmann <
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer