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
, _close
i _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.
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 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 na dysku. Tylko _flushall
i fflush
mają wpływ na COMMODE.OBJ
wartość .
Aby uzyskać informacje na temat kontrolowania funkcji zatwierdzania na dysku, zobacz Stream We/Wy, fopen
i _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