• 4/2/2020
  • 2 Minuten zu lesen
    • T
    • v
    • n
    • m
    • c
    • +5

Spült einen Strom.

Syntax

int fflush( FILE *stream);

Parameter

stream
Zeiger auf FILE-Struktur.

Rückgabewert

fflush gibt 0 zurück, wenn der Puffer erfolgreich geleert wurde. Der Wert 0 wird auch in Fällen zurückgegeben, in denen der angegebene Stream keinen Puffer hat oder nur zum Lesen geöffnet ist. Ein Rückgabewert von EOF zeigt einen Fehler an.

Hinweis

Wenn fflush EOF zurückgibt, können Daten aufgrund eines Schreibfehlers verloren gegangen sein. Beim Einrichten eines kritischen Fehler-Handlers ist es am sichersten, die Pufferung mit der setvbuf-Funktion auszuschalten oder Low-Level-I/O-Routinen wie _open, _close und _write anstelle der Stream-I/O-Funktionen zu verwenden.

Hinweise

Die Funktion fflush spült den Stream. Wenn der Stream im Schreibmodus geöffnet wurde oder im Aktualisierungsmodus geöffnet wurde und der letzte Vorgang ein Schreibvorgang war, wird der Inhalt des Stream-Puffers in die zugrunde liegende Datei oder das Gerät geschrieben und der Puffer verworfen. Wenn der Stream im Lesemodus geöffnet wurde oder wenn der Stream keinen Puffer hat, hat der Aufruf von fflush keine Auswirkung, und der Puffer wird beibehalten. Ein Aufruf von fflush hebt die Wirkung eines vorherigen Aufrufs von ungetc für den Stream auf. Der Stream bleibt nach dem Aufruf offen.

Wenn stream NULL ist, ist das Verhalten das gleiche wie ein Aufruf von fflush für jeden offenen Stream. Alle im Schreibmodus geöffneten Streams und alle im Aktualisierungsmodus geöffneten Streams, bei denen die letzte Operation ein Schreibvorgang war, werden gespült. Der Aufruf hat keine Auswirkung auf andere Streams.

Puffer werden normalerweise vom Betriebssystem verwaltet, das den optimalen Zeitpunkt bestimmt, um die Daten automatisch auf die Festplatte zu schreiben: 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 Commit-to-Disk-Funktion der Laufzeitbibliothek können Sie sicherstellen, dass kritische Daten direkt auf die Festplatte und nicht in die Puffer des Betriebssystems geschrieben werden. Ohne ein bestehendes Programm neu zu schreiben, können Sie diese Funktion aktivieren, indem Sie die Objektdateien des Programms mit COMMODE.OBJ verknüpfen. In der resultierenden ausführbaren Datei schreiben die Aufrufe von _flushall den Inhalt aller Puffer auf die Festplatte. Nur _flushall und fflush sind von COMMODE.OBJ betroffen.

Informationen zur Steuerung der Festplattenfunktion finden Sie unter Stream I/O, fopen und _fdopen.

Diese Funktion sperrt den aufrufenden Thread und ist daher thread-sicher. Für eine nicht sperrende Version siehe _fflush_nolock.

Standardmäßig ist der globale Status dieser Funktion auf die Anwendung beschränkt. Um dies zu ändern, siehe Globaler Status in der CRT.

Anforderungen

Funktion Erforderlicher Header
fflush <stdio.h>

Für zusätzliche Kompatibilitätsinformationen siehe 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;}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.