fflush
Vyprázdní datový proud.
Syntaxe
int fflush(
FILE *stream
);
Parametry
stream
Ukazatel na FILE
strukturu.
Vrácená hodnota
fflush
vrátí hodnotu 0, pokud byla vyrovnávací paměť úspěšně vyprázdněna. Hodnota 0 je vrácena také v případech, kdy zadaný datový proud nemá žádnou vyrovnávací paměť nebo je otevřen pouze pro čtení. Návratová EOF
hodnota značí chybu.
Poznámka:
Pokud fflush
se vrátí EOF
, data mohla být ztracena kvůli selhání zápisu. Při nastavování kritické obslužné rutiny chyb je nejbezpečnější vypnout ukládání do vyrovnávací paměti pomocí setvbuf
funkce nebo použít rutiny vstupně-výstupních operací nízké úrovně, jako _open
je , _close
a _write
místo vstupně-výstupních funkcí datového proudu.
Poznámky
Funkce fflush
vyprázdní datový proud stream
. Pokud byl datový proud otevřen v režimu zápisu nebo byl otevřen v režimu aktualizace a poslední operace byla zápis, fflush
zapíše obsah vyrovnávací paměti datového proudu do podkladového souboru nebo zařízení a vyrovnávací paměť se zahodí. Pokud byl datový proud otevřen v režimu čtení nebo pokud stream nemá žádnou vyrovnávací paměť, volání fflush
nemá žádný vliv a veškerá vyrovnávací paměť se zachová. Volání fflush
neguje účinek jakéhokoli předchozího volání ungetc
datového proudu. Stream zůstane po volání otevřený.
Pokud stream
ano NULL
, chování je stejné jako volání u fflush
každého otevřeného streamu. Všechny datové proudy otevřené v režimu zápisu a všechny datové proudy otevřené v režimu aktualizace, kde poslední operace byla zápisem, se vyprázdní. Volání nemá žádný vliv na jiné datové proudy.
Vyrovnávací paměti jsou obvykle udržovány operačním systémem, což určuje optimální čas pro zápis dat automaticky na disk: když je vyrovnávací paměť plná, když je stream zavřený nebo když program normálně ukončí bez zavření datového proudu. Funkce zápisu na disk knihovny za běhu umožňuje zajistit, aby se důležitá data zapisují přímo na disk, a ne do vyrovnávací paměti operačního systému. Bez přepsání existujícího programu můžete tuto funkci povolit propojením souborů objektů programu s COMMODE.OBJ
. Ve výsledném spustitelném souboru volání zapisují _flushall
obsah všech vyrovnávacích pamětí na disk. Pouze _flushall
a fflush
jsou ovlivněny COMMODE.OBJ
.
Informace o řízení funkce commit-to-disk naleznete v tématu Stream vstupně-výstupní operace a fopen
_fdopen
.
Tato funkce uzamkne volající vlákno a je proto bezpečná pro přístup z více vláken. Informace o nezamykání verze najdete v tématu _fflush_nolock
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Function | Požadovaný hlavičkový soubor |
---|---|
fflush |
<stdio.h> |
Další informace o kompatibilitě najdete v tématu 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;
}
5
User selected 5
Viz také
Vstupně-výstupní operace streamu
fclose
, _fcloseall
_flushall
setvbuf