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 fflushEOF 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 streamNULL 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 _fdopenfopen.

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

Siehe auch

Stream-E/A
fclose, _fcloseall
_flushall
setvbuf