Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

fflush - Datenstrom leeren

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int fflush(FILE *stream);

Beschreibung

Zeigt stream auf einen Ausgabestrom oder einen Aktualisierungsstrom, dessen letzte Operation keine Eingabeoperation war, bewirkt fflush(), dass alle gepufferten Daten für diesen Datenstrom in die Datei geschrieben werden. Ist stream ein Nullzeiger, führt fflush() diese Tätigkeiten für alle geöffneten Dateien durch.

Returnwert

0

bei Erfolg. Der Puffer wurde geleert.

 

EOF

bei Fehler. Der Puffer wurde nicht geleert. errno wird gesetzt, um den Fehler anzuzeigen.

BS2000
Der Puffer brauchte nicht geleert zu werden, weil er noch nicht existiert (für die Datei ist noch keine Schreibfunktion ausgeführt) oder die Datei ist eine Eingabe- oder INCORE-Datei. (Ende)

stream ist keiner Datei zugeordnet (z.B. weil die Datei bereits geschlossen ist) oder die gepufferten Daten konnten nicht übertragen werden.

Fehler

fflush() schlägt fehl, wenn gilt:


EAGAIN

Das Kennzeichen O_NONBLOCK ist für den stream zu Grunde liegenden Dateideskriptor gesetzt, und eine Schreiboperation würde den Prozess verzögern


EBADF

Der stream Dateideskriptor ist nicht gültig.


EFBIG

Es wurde versucht, auf eine Datei zu schreiben, deren Größe die maximale Dateigröße oder die Grenze des Prozesses für die Dateigröße (siehe auch ulimit()) überschreitet.


EINTR

fflush() wurde durch ein Signal unterbrochen.


EIO

Ein Ein-/Ausgabefehler ist aufgetreten.

Der Prozess ist Mitglied einer Hintergrund-Prozessgruppe und will auf das steuernde Terminal schreiben, 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 freier Platz mehr vorhanden.

 

EPIPE

Es wurde der Versuch unternommen, auf eine Pipe oder FIFO zu schreiben, die von keinem Prozess zum Lesen geöffnet war. Außerdem wird das Signal SIGPIPE an den Prozess 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

Ob fflush() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der

Programmumgebung ab.

BS2000
Bei allen Standard-Ausgabefunktionen, die Daten in eine BS2000-Datei schreiben (printf(), putc(), fwrite() etc.), werden die Daten in einem Puffer zwischengespeichert und erst in die Datei geschrieben, wenn eines der folgenden Ereignisse eintritt:

  • Ein Zeilenendezeichen (\n) wird erkannt (nur bei Textdateien).

  • Die maximale Satzlänge einer Plattendatei ist erreicht.

  • Bei Terminals: Nach einer Ausgabe auf das Terminal folgt eine Eingabe vom Terminal.

  • Die Funktionen fseek(), fsetpos(), rewind() oder fflush() werden aufgerufen.

  • Die Datei wird geschlossen.

Zusätzlich nur bei ANSI-Funktionalität:
Wenn das Lesen aus einer beliebigen Textdatei eine Datenübertragung von der externen Datei in den Puffer notwendig macht, werden die noch in Puffern zwischengespeicherten Daten aller ISAM-Dateien automatisch in die Dateien geschrieben.

Die Pufferung entfällt bei Ausgaben in Zeichenketten (sprintf()) und in INCORE-Dateien.
Auch wenn die Daten im Puffer nicht mit einem Zeilenendezeichen enden, bewirkt fflush() in einer Textdatei einen Zeilenwechsel. Nachfolgende Daten werden in eine neue Zeile bzw. in einen neuen Satz geschrieben.

Ausnahme bei ANSI-Funktionalität:
Wenn die Daten einer ISAM-Datei im Puffer nicht mit einem Zeilenendezeichen enden, bewirkt fflush() keinen Zeilenwechsel bzw. Satzwechsel. Nachfolgende Daten verlängern den Satz in der Datei. Beim Lesen einer ISAM-Datei werden daher nur Zeilenendezeichen eingelesen, die vom Programm explizit geschrieben wurden.

fflush() wird intern automatisch ausgeführt, wenn eine Datei geschlossen wird
(fclose(), close()) oder wenn ein Programm normal bzw. mit exit() beendet wird. fflush() kann dazu benutzt werden, die Ausgabe von Daten während des Programmablaufs zu steuern, z.B. um diverse Eingaben zu einer einzigen Ausgabe zu verketten und zu einem selbst definierten Zeitpunkt auf einmal auszugeben.
Bei Satz-Ein-/Ausgabe wird der Aufruf von fflush() zwar nicht mit Fehler abgewiesen, bleibt jedoch ohne Wirkung. Bei Dateien mit Satz-Ein-/Ausgabe werden keine Daten gepuffert. (Ende)

Siehe auch

exit(), close(), fclose(), stdio.h.