Share via


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 _openje , _closea _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