• 4/2/2020
  • 2 minuty na przeczytanie
    • T
    • . v
    • n
    • m
    • c
    • +5

Płucze strumień.

Syntaktyka

int fflush( FILE *stream);

Parametry

strumień
Pointer do struktury FILE.

Wartość zwracana

fflush zwraca 0, jeśli bufor został pomyślnie przepłukany. Wartość 0 jest zwracana również w przypadkach, gdy określony strumień nie ma bufora lub jest otwarty tylko do odczytu. Wartość zwracana EOF oznacza błąd.

Uwaga

Jeśli fflush zwraca EOF, dane mogły zostać utracone z powodu błędu zapisu. Podczas konfigurowania obsługi błędów krytycznych najbezpieczniej jest wyłączyć buforowanie za pomocą funkcji setvbuf lub używać niskopoziomowych procedur I/O, takich jak _open, _close i _write zamiast funkcji I/O strumienia.

Uwagi

Funkcja fflush spłukuje strumień. Jeżeli strumień został otwarty w trybie zapisu, lub został otwarty w trybie aktualizacji i ostatnią operacją był zapis, zawartość bufora strumienia jest zapisywana do bazowego pliku lub urządzenia, a bufor jest odrzucany. Jeśli strumień został otwarty w trybie odczytu, lub jeśli strumień nie ma bufora, to wywołanie fflush nie ma żadnego efektu, a bufor jest zachowywany. Wywołanie fflush neguje efekt każdego wcześniejszego wywołania ungetc dla strumienia. Strumień pozostaje otwarty po wywołaniu.

Jeśli strumień jest NULL, zachowanie jest takie samo jak wywołanie fflush na każdym otwartym strumieniu. Wszystkie strumienie otwarte w trybie zapisu i wszystkie strumienie otwarte w trybie aktualizacji, gdzie ostatnią operacją był zapis, są spłukiwane. Wywołanie nie ma wpływu na inne strumienie.

Bufory są zwykle utrzymywane przez system operacyjny, który określa optymalny czas automatycznego zapisu danych na dysk: gdy bufor jest pełny, gdy strumień jest zamknięty lub gdy program kończy pracę bez zamykania strumienia. Funkcja commit-to-disk biblioteki run-time pozwala zapewnić, że krytyczne dane są zapisywane bezpośrednio na dysku, a nie w buforach systemu operacyjnego. Bez przepisywania istniejącego programu można włączyć tę funkcję, łącząc pliki obiektowe programu z COMMODE.OBJ. W wynikowym pliku wykonywalnym wywołania _flushall zapisują zawartość wszystkich buforów na dysk. Tylko na _flushall i fflush mają wpływ COMMODE.OBJ.

Informacje o kontrolowaniu funkcji commit-to-disk, zobacz Stream I/O, fopen i _fdopen.

Ta funkcja blokuje wątek wywołujący i dlatego jest bezpieczna dla wątków. Dla wersji bez blokady, zobacz _fflush_nolock.

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

Wymagania

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

Dodatkowe informacje o kompatybilności, patrz Kompatybilność.

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

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.