• 4/2/2020
  • 2 minuty na přečtení
    • T
    • . v
    • n
    • m
    • c
    • +5

Splachuje proud.

Syntaxe

int fflush( FILE *stream);

Parametry

stream
Ukazatel na strukturu FILE.

Vrácená hodnota

fflush vrací 0, pokud byla vyrovnávací paměť úspěšně propláchnuta. Hodnota 0 je vrácena také v případech, kdy zadaný stream nemá žádnou vyrovnávací paměť nebo je otevřen pouze pro čtení. Návratová hodnota EOF znamená chybu.

Poznámka

Pokud fflush vrátí EOF, mohlo dojít ke ztrátě dat v důsledku selhání zápisu. Při nastavování obsluhy kritických chyb je nejbezpečnější vypnout vyrovnávací paměť pomocí funkce setvbuf nebo použít nízkoúrovňové I/O rutiny, jako jsou _open, _close a _write, místo I/O funkcí proudu.

Poznámky

Funkce fflush propláchne proud. Pokud byl proud otevřen v režimu zápisu nebo byl otevřen v režimu aktualizace a poslední operací byl zápis, obsah vyrovnávací paměti proudu se zapíše do podkladového souboru nebo zařízení a vyrovnávací paměť se zahodí. Pokud byl proud otevřen v režimu čtení nebo pokud proud nemá vyrovnávací paměť, volání příkazu fflush nemá žádný účinek a případná vyrovnávací paměť je zachována. Volání fflush neguje účinek jakéhokoli předchozího volání ungetc pro daný stream. Stream zůstává po volání otevřený.

Je-li stream NULL, chování je stejné jako při volání fflush pro každý otevřený stream. Všechny proudy otevřené v režimu zápisu a všechny proudy otevřené v režimu aktualizace, kde poslední operací byl zápis, jsou propláchnuty. Volání nemá žádný vliv na ostatní proudy.

Vyrovnávací paměti jsou normálně udržovány operačním systémem, který určuje optimální čas pro automatický zápis dat na disk: když je vyrovnávací paměť plná, když je proud uzavřen nebo když je program normálně ukončen bez uzavření proudu. Funkce commit-to-disk knihovny run-time umožňuje zajistit, aby se kritická data zapisovala přímo na disk, a nikoli do vyrovnávacích pamětí operačního systému. Aniž byste museli přepisovat existující program, můžete tuto funkci povolit propojením objektových souborů programu s COMMODE.OBJ. Ve výsledném spustitelném souboru volání _flushall zapíše obsah všech vyrovnávacích pamětí na disk. Pouze funkce _flushall a fflush jsou ovlivněny COMMODE.OBJ.

Informace o ovládání funkce odevzdání na disk naleznete v částech Stream I/O, fopen a _fdopen.

Tato funkce uzamyká volající vlákno, a proto je thread-safe. Verzi bez zamykání naleznete v části _fflush_nolock.

Ve výchozím nastavení je globální stav této funkce rozprostřen na aplikaci. Chcete-li to změnit, přečtěte si část Globální stav v CRT.

Požadavky

Funkce Požadovaná hlavička
fflush <stdio.h>

Další informace o kompatibilitě viz Kompatibilita.

Příklad

// 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;}

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.