fflush

Opróżnia strumień.

Składnia

int fflush(
   FILE *stream
);

Parametry

stream
Wskaźnik do FILE struktury.

Wartość zwracana

fflush Zwraca wartość 0, jeśli bufor został pomyślnie opróżniony. Wartość 0 jest również zwracana w przypadkach, w których określony strumień nie ma buforu lub jest otwarty do odczytu tylko. Zwracana wartość EOF wskazuje błąd.

Uwaga

Jeśli fflush zwraca wartość EOF, dane mogły zostać utracone z powodu błędu zapisu. Podczas konfigurowania procedury obsługi błędów krytycznych można bezpiecznie wyłączyć buforowanie za pomocą setvbuf funkcji lub użyć procedur we/wy niskiego poziomu, takich jak _open, _closei _write zamiast funkcji we/wy strumienia.

Uwagi

Funkcja fflush opróżnia strumień stream. Jeśli strumień został otwarty w trybie zapisu lub został otwarty w trybie aktualizacji, a ostatnia operacja była zapisem, fflush zapisuje zawartość buforu strumienia do bazowego pliku lub urządzenia, a bufor jest odrzucany. Jeśli strumień został otwarty w trybie odczytu lub jeśli strumień nie ma buforu, wywołanie fflush nie ma żadnego efektu, a każdy bufor jest zachowywany. Wywołanie fflush negacji wpływu jakiegokolwiek wcześniejszego wywołania ungetc strumienia. Strumień pozostaje otwarty po wywołaniu.

Jeśli stream wartość to NULL, zachowanie jest takie samo jak wywołanie dla fflush każdego otwartego strumienia. Wszystkie strumienie otwarte w trybie zapisu i wszystkie strumienie otwarte w trybie aktualizacji, w którym ostatnia operacja była operacją zapisu, są opróżniane. Wywołanie nie ma wpływu na inne strumienie.

Bufory są zwykle utrzymywane przez system operacyjny, który określa optymalny czas automatycznego zapisywania danych na dysku: gdy bufor jest pełny, gdy strumień jest zamknięty lub gdy program kończy się normalnie bez zamykania strumienia. Funkcja commit-to-disk biblioteki czasu wykonywania umożliwia zapewnienie, że krytyczne dane są zapisywane bezpośrednio na dysku, a nie do buforów systemu operacyjnego. Bez ponownego zapisywania istniejącego programu można włączyć tę funkcję, łącząc pliki obiektów programu za pomocą polecenia COMMODE.OBJ. W wynikowym pliku wykonywalnego wywołania _flushall zapisują zawartość wszystkich buforów na dysku. Tylko _flushall i fflush mają wpływ na COMMODE.OBJwartość .

Aby uzyskać informacje na temat kontrolowania funkcji zatwierdzania na dysku, zobacz Stream We/Wy, fopeni _fdopen.

Ta funkcja blokuje wątek wywołujący i dlatego jest bezpieczna wątkowo. Aby uzyskać wersję nieblokającą, zobacz _fflush_nolock.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Function Wymagany nagłówek
fflush <stdio.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Zobacz też

We/Wy strumienia
fclose, _fcloseall
_flushall
setvbuf