Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

fclose - Datenstrom schließen

&pagelevel(4)&pagelevel

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.