fread(3S) fread(3S)
NAME
fread, fwrite - Binäre Ein-/Ausgabe
SYNTAX
#include <stdio.h>
sizet fread(void *ptr, sizet size, sizet nitems, FILE *stream);
sizet fwrite(const void *ptr, sizet size, sizet nitems, FILE *stream);
BESCHREIBUNG
fread() liest bis zu nitems Einheiten von stream in ein Feld, auf das
ptr zeigt, wobei eine Dateneinheit eine Folge von Bytes der Länge size
ist. Diese Folge von Bytes wird nicht notwendigerweise durch ein
Null-Byte beendet. fread() hört mit dem Lesen auf, wenn beim Lesen von
stream ein Dateiende-Zeichen oder eine Fehlerbedingung angetroffen
wird oder nitems Einheiten gelesen worden sind. fread() erhöht den
Schreib-/Lesezeiger in stream, so daß er auf das Byte hinter dem
zuletzt gelesenen Byte zeigt, sofern es ein solches gibt. fread()
ändert den Inhalt von stream nicht. fread() gibt die Anzahl der gele-
senen Einheiten zurück. Der Rückgabewert ist nur dann kleiner als
nitems, wenn ein Lesefehler oder ein EOF auftritt.
fwrite() schreibt auf die angegebene Ausgabe stream höchstens nitems
Dateneinheiten aus dem Feld, auf das ptr zeigt, wobei eine Einheit
eine Folge von Bytes der Länge size ist. Diese Folge von Bytes wird
nicht notwendigerweise mit einem Null-Byte beendet. fwrite() hört auf
zu schreiben, wenn es nitems Dateneinheiten geschrieben hat oder wenn
auf dem stream eine Fehlerbedingung angetroffen wurde. fwrite() ändert
nicht den Inhalt des Feldes, auf das ptr zeigt. fwrite() erhöht den
Schreib-/Lesezeiger in stream um die Anzahl der geschriebenen Bytes.
fwrite() gibt die Anzahl der geschriebenen Dateneinheiten zurück.
Wenn size oder nitems null ist, geben fread() und fwrite() den Wert 0
zurück. Der Inhalt des Feldes, auf das ptr zeigt, und der Zustand von
stream bleiben unverändert.
Die Routinen ferror() oder feof() müssen verwendet werden, um zwischen
Fehlerbedingungen und Dateiende zu unterscheiden.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktion fread() schlägt fehl, wenn:
EAGAIN Das Flag ONONBLOCK für den Dateideskriptor, der stream
zugrundeliegt, ist gesetzt, und der Prozeß wurde beim
Lesevorgang verzögert.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
fread(3S) fread(3S)
EBADF Der Dateideskriptor, der stream zugrundeliegt, ist kein
gültiger Dateideskriptor, der zum Lesen geöffnet ist.
EINTR Infolge eines Signals wurde die Leseoperation beendet, und
es wurden keine Daten übertragen.
EIO Ein physischer Ein-/Ausgabefehler ist aufgetreten, oder
der Prozeß gehört zu einer Hintergrundprozeßgruppe, welche
von dem kontrollierenden Terminal zu lesen versucht. Ent-
weder ignoriert oder blockiert der Prozeß das Signal
SIGTTIN, oder die Prozeßgruppe des Prozesses ist verwaist.
Dieser Fehler kann auch unter implementationsabhängigen
Bedingungen gemeldet werden.
EOVERFLOW Die Datei ist eine reguläre Datei, und es wurde versucht,
bis hin oder über den maximalen Offset hinaus zu lesen,
der dem entsprechenden Datenstrom zugeordnet ist.
Die Funktion fread() kann fehlschlagen, falls:
ENOMEM Es ist nur unzureichend Speicherplatz vorhanden.
ENXIO Es wurde eine Anforderung an ein nicht-existierendes Gerät
gemacht bzw. die Anforderung ist außerhalb der Möglichkei-
ten des Geräts.
Die Funktion fwrite() schlägt fehl, wenn:
EAGAIN Das Flag ONONBLOCK für den Dateideskriptor, der stream
zugrundeliegt, ist gesetzt, und der Prozeß wurde beim
Schreibvorgang verzögert.
EBADF Der Dateideskriptor, der stream zugrundeliegt, ist kein
gültiger Dateideskriptor, der zum Schreiben geöffnet ist.
EFBIG Es wurde versucht, in eine Datei zu schreiben, deren Größe
die maximale Dateigröße oder die maximale Dateigröße des
Prozesses überschreitet.
EFBIG Die Datei ist eine reguläre Datei, und es wurde versucht,
bis hin oder über den maximalen Offset hinaus zu schrei-
ben, der dem entsprechenden Datenstrom zugeordnet ist.
EINTR Infolge eines Signals wurde die Schreiboperation beendet,
und es wurden keine Daten übertragen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
fread(3S) fread(3S)
EIO Ein physischer Ein-/Ausgabefehler ist aufgetreten, oder
der Prozeß gehört zu einer Hintergrundprozeßsgruppe, wel-
che auf das kontrollierende Terminal zu schreiben ver-
sucht. TOSTOP ist gesetzt, weder ignoriert noch blockiert
der Prozeß SIGTTOU, und die Prozeßgruppe des Prozesses ist
verwaist. Dieser Fehler kann auch unter implementationsab-
hängigen Bedingungen gemeldet werden.
ENOSPC Es war kein freier Platz auf dem Gerät, das die Datei ent-
hält, mehr übrig.
EPIPE Es wurde versucht, auf eine Pipe oder FIFO zu schreiben,
die für keinen Prozeß leseberechtigt ist. Es wird auch ein
Signal SIGPIPE zum Prozeß gesendet.
Die Funktion fwrite() kann fehlschlagen, falls:
ENOMEM Es ist nur unzureichend Speicherplatz vorhanden.
ENXIO Es wurde eine Anforderung an ein nicht-existierendes Gerät
gemacht bzw. die Anforderung ist außerhalb der Möglichkei-
ten des Geräts.
ERGEBNIS
Wenn ein Fehler auftritt, wird die Fehleranzeige für stream gesetzt.
SIEHE AUCH
exit(2), lseek(2), read(2), write(2), abort(3C), fclose(3S),
fopen(3S), getc(3S), gets(3S), printf(3S), putc(3S), puts(3S),
scanf(3S), stdio(3S), lfs(5), stdio(5).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98