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.
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.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
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla