Definition | #include <stdio.h> int fclose(FILE *stream); |
Beschreibung | fclose() leert den Puffer des Datenstroms, auf den stream zeigt, und schließt die zugehörige Datei. Alle gepufferten, aber noch nicht geschriebenen Daten für diesen Datenstrom werden in die Datei geschrieben; alle gepufferten, noch nicht gelesenen Daten werden entfernt. Die Zuordnung des Datenstroms zur Datei wird aufgehoben. Wurde der zugehörige Puffer automatisch reserviert, wird er wieder freigegeben. Die Funktion fclose() führt ein close() für den Dateideskriptor aus, auf den stream zeigt.
Nach dem Aufruf von fclose() ist das Verhalten von stream undefiniert. |
Returnwert | 0 | bei Erfolg. |
| EOF
| bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | fclose() schlägt fehl, wenn gilt:
|
| EAGAIN
| Das Kennzeichen O_NONBLOCK ist für den stream zu Grunde liegenden Dateideskriptor gesetzt, und der Prozess würde durch eine Schreiboperation verzögert. |
| EBADF
| Der stream zu Grunde liegende Dateideskriptor ist kein gültiger Dateideskriptor. Erweiterung Die BS2000-Datei ist nicht in diesem Prozess zugreifbar. (Ende) |
| EFBIG
| Es wurde versucht, in eine Datei zu schreiben, deren Größe die maximale Dateigröße oder die Grenze des Prozesses für die Dateigröße überschreitet (siehe auch
ulimit() ). |
| EINTR
| fclose() wurde durch ein Signal unterbrochen.
|
| EIO
| Ein Ein-/Ausgabefehler ist aufgetreten. Der Prozess ist Mitglied einer Hintergrundprozessgruppe, die auf ihr steuerndes Terminal schreiben will, TOSTOP ist gesetzt, das Signal SIGTTOU wird vom Prozess weder ignoriert noch blockiert, und die Prozessgruppe des Prozesses ist verwaist. |
| ENOSPC
| Auf dem Datenträger, auf dem sich die Datei befindet, ist kein Platz mehr frei. |
| ENXIO
| Es wurde ein nicht existierendes Gerät angefordert oder die Anforderung lag außerhalb der Leistungsgrenzen des Geräts. |
| EPIPE
| Es wurde der Versuch unternommen, auf eine Pipe oder FIFO zu schreiben, die durch keinen Prozess zum Lesen geöffnet war. An den Prozess wird auch das Signal SIGPIPE gesendet. Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus: Beim EPIPE -Fehler wird das Signal SIGPIPE nicht an den Prozess, sondern an den aufrufenden Thread gesendet. |
Hinweise | Jedes Mal, wenn ein Programm normal oder mit exit() beendet wird, wird für jede offene Datei automatisch ein fclose() ausgeführt. fclose() braucht also nur dann explizit aufgerufen zu werden, wenn vor Programmbeendigung eine Datei geschlossen werden soll, z.B. um das Limit für geöffnete Dateien (=2048) nicht zu überschreiten. Ob fclose() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab. BS2000 Zeigt stream nicht auf eine FILE -Struktur, bricht das Programm ab. Da bei Satz-Ein-/Ausgabe keine Daten gepuffert werden, entfällt der interne Aufruf der Funktion fflush() . (Ende) |
Siehe auch | close() , exit() , fflush() , fopen() , setbuf() , stdio.h .
|