fflush
Leert einen Stream
Syntax
int fflush(
FILE *stream
);
Parameter
stream
Zeiger zur FILE
-Struktur.
Rückgabewert
fflush
gibt 0 zurück, wenn der Puffer erfolgreich geleert wurde. Der Wert 0 wird auch dann zurückgegeben, wenn der angegebene Stream über keinen Puffer verfügt oder nur zum Lesen geöffnet wird. Der Rückgabewert EOF
gibt einen Fehler an.
Hinweis
Wenn fflush
EOF
zurückgibt, sind möglicherweise Daten aufgrund eines Schreibfehlers verloren gegangen. Bei der Einrichtung eines wichtigen Fehlerhandlers ist es am sichersten, die Pufferung mit der Funktion setvbuf
zu deaktivieren oder eine E/A-Routine auf niedriger Ebene wie _open
, _close
, und _write
anstelle der E/A-Streamfunktionen zu verwenden.
Hinweise
Die Funktion fflush
leert den Stream stream
. Wenn der Datenstrom im Schreibmodus geöffnet wurde oder er im Updatemodus geöffnet wurde und der letzte Vorgang ein Schreibvorgang war, fflush
schreibt den Inhalt des Datenstrompuffers in die zugrunde liegende Datei oder das Gerät, und der Puffer wird verworfen. Wenn der Stream im Lesemodus geöffnet wurde oder keinen Puffer besitzt, hat der Aufruf von fflush
keine Auswirkungen, und der Puffer wird beibehalten. Ein Aufruf von fflush
negiert die Wirkung aller vorherigen Aufrufe von ungetc
für den Stream. Der Stream bleibt nach dem Aufruf geöffnet.
Wenn stream
NULL
ist, entspricht das Verhalten einem Aufruf von fflush
in allen geöffneten Streams. Alle im Schreibmodus geöffneten Streams und alle Streams im Updatemodus, in denen der letzte Vorgang ein Schreibvorgang war, werden geleert. Der Aufruf hat keine Auswirkungen auf andere Streams.
Puffer werden normalerweise vom Betriebssystem verwaltet, das den optimalen Zeitpunkt bestimmt, zu dem Daten automatisch auf den Datenträger geschrieben werden: wenn ein Puffer voll ist, wenn ein Stream geschlossen wird oder wenn ein Programm normal beendet wird, ohne den Stream zu schließen. Mit der Datenträgercommitfunktion der Laufzeitbibliothek können Sie sicherstellen, dass wichtige Daten direkt auf den Datenträger anstatt in die Betriebssystempuffer geschrieben werden. Ohne Umschreiben eines vorhandenen Programms können Sie dieses Feature aktivieren, indem Sie die Objektdateien des Programms mit COMMODE.OBJ
. In der resultierenden ausführbaren Datei schreiben Aufrufe von _flushall
den Inhalt aller Puffer auf den Datenträger. Nur _flushall
und fflush
sind von COMMODE.OBJ
.
Informationen zum Steuern der Commit-to-Disk-Funktion finden Sie unter Stream-E/A und _fdopen
fopen
.
Diese Funktion sperrt den aufrufenden Thread und ist threadsicher. Eine nicht sperrende Version finden Sie unter _fflush_nolock
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Funktion | Erforderlicher Header |
---|---|
fflush |
<stdio.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_fflush.c
// Compile with: cl /W4 crt_fflush.c
// This sample gets a number from the user, then writes it to a file.
// It ensures the write isn't lost on crash by calling fflush.
#include <stdio.h>
int * crash_the_program = 0;
int main(void)
{
FILE * my_file;
errno_t err = fopen_s(&my_file, "myfile.txt", "w");
if (my_file && !err)
{
printf("Write a number: ");
int my_number = 0;
scanf_s("%d", &my_number);
fprintf(my_file, "User selected %d\n", my_number);
// Write data to a file immediately instead of buffering.
fflush(my_file);
if (my_number == 5)
{
// Without using fflush, no data was written to the file
// prior to the crash, so the data is lost.
*crash_the_program = 5;
}
// Normally, fflush is not needed as closing the file will write the buffer.
// Note that files are automatically closed and flushed during normal termination.
fclose(my_file);
}
return 0;
}
5
User selected 5