Scroll to navigation

FREAD(3) Linux-Programmierhandbuch FREAD(3)

BEZEICHNUNG

fread, fwrite - Ein-/Ausgabe binärer Datenströme

ÜBERSICHT

#include <stdio.h>
size_t fread(void *zeiger, size_t groesse,
             size_t nmemb, FILE *datenstrom);
size_t fwrite(const void *zeiger, size_t groesse,
              size_t nmemb, FILE *datenstrom);

BESCHREIBUNG

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).

RÜCKGABEWERT

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.

ATTRIBUTE

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

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, C89.

BEISPIELE

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


Programmquelltext

#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int
main(void)
{
    FILE *fp = fopen("/bin/sh", "rb");
    if (!fp) {
        perror("fopen");
        return EXIT_FAILURE;
    }
    unsigned char buffer[4];
    size_t ret = fread(buffer, ARRAY_SIZE(buffer), sizeof(*buffer), fp);
    if (ret != sizeof(*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);
}

SIEHE AUCH

read(2), write(2), feof(3), ferror(3), unlocked_stdio(3)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze <joey@infodrom.org>, Chris Leick <c.leick@vollbio.de> und Helge Kreutzmann <debian@helgefjell.de> 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.

13. August 2020 GNU