fclose(3S) fclose(3S)
NAME
fclose, fflush - Stream schließen oder leeren
SYNTAX
#include <stdio.h>
int fclose(FILE *stream);
int fflush(FILE *stream);
BESCHREIBUNG
Mit der Funktion fclose() wird der Datenstrom, auf den stream zeigt,
bereinigt. Die zugeordnete Datei wird geschlossen. Alle gepufferten,
aber noch nicht geschriebenen Daten für den Stream werden in die Datei
geschrieben. Alle gepufferten, ungelesenen Daten werden entfernt. Die
Zuordnung zwischen Stream und Datei wird gelöst. Wenn der zugeordnete
Puffer automatisch zugeordnet wurde, wird diese Zuordnung gelöst. Die
Felder stctime und stmtime der zugrundeliegenden Datei werden zur
Aktualisierung gekennzeichnet, wenn in den Stream geschrieben werden
konnte, gepufferte Daten aber noch nicht in die Datei geschrieben wur-
den. Die Funktion fclose() führt close() für den Dateideskriptor
durch, der dem Stream zugeordnet ist, auf den stream zeigt.
Nach dem Aufruf von fclose() ist das Verhalten von stream undefiniert.
Wenn stream auf einen Ausgabe- oder Aktualisierungsstream zeigt, auf
dem die letzte Operation keine Eingabeoperation war, bewirkt fflush(),
daß gepufferte Daten für den stream, in die Datei geschrieben werden.
Die stctime- und stmtime-Felder der zugrundeliegenden Datei werden
für die Aktualisierung markiert.
Beim Aufruf von fflush(), wenn stream ein Nullzeiger ist, werden bei
allen zum Schreiben geöffneten Dateien die Puffer geleert.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktion fclose() bzw. fflush() 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ül-
tiger 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.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
fclose(3S) fclose(3S)
EFBIG Die Datei ist eine reguläre Datei, und es wurde versucht,
bis hin oder über den maximalen Offset hinaus zu schreiben,
der dem entsprechenden Datenstrom zugeordnet ist.
EINTR Die Funktion wurde infolge eines Signals unterbrochen.
EIO Der Prozeß gehört zu einer Hintergrundprozeßgruppe, welche
auf das kontrollierende Terminal zu schreiben versucht.
TOSTOP ist gesetzt, weder ignoriert noch blockiert der Pro-
zeß SIGTTOU, und die Prozeßgruppe des Prozesses ist ver-
waist. Dieser Fehler kann auch unter implementationsabhängi-
gen 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 Sig-
nal SIGPIPE zum Prozeß gesendet.
Die Funktion fclose() bzw. fflush() kann fehlschlagen, falls:
ENXIO Es wurde eine Anforderung an ein nicht-existierendes Gerät
gemacht bzw. die Anforderung ist außerhalb der Möglichkeiten
des Geräts.
ERGEBNIS
Bei erfolgreicher Beendigung geben diese Funktionen den Wert 0 zurück.
Sonst wird EOF zurückgegeben und errno gesetzt, um den Fehler anzuzei-
gen.
SIEHE AUCH
close(2), exit(2), fopen(3S), setbuf(3S), stdio(3S), lfs(5), stdio(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98