fflush
Akışı temizler.
Sözdizimi
int fflush(
FILE *stream
);
Parametreler
stream
Yapı işaretçisi FILE
.
Dönüş değeri
fflush
arabellek başarıyla boşaltıldıysa 0 döndürür. Belirtilen akışın arabelleğe sahip olmadığı veya yalnızca okuma için açık olduğu durumlarda da 0 değeri döndürülür. değerinin EOF
dönüş değeri bir hatayı gösterir.
Not
döndürürse fflush
EOF
, yazma hatası nedeniyle veriler kaybolmuş olabilir. Kritik bir hata işleyicisi ayarlarken, işleviyle setvbuf
arabelleği kapatmak veya akış G/Ç işlevleri yerine , _close
ve _write
gibi _open
düşük düzey G/Ç yordamları kullanmak en güvenlidir.
Açıklamalar
fflush
işlevi akışı stream
temizler. Akış yazma modunda açıldıysa veya güncelleştirme modunda açıldıysa ve son işlem bir yazma işlemiyse, fflush
akış arabelleğinin içeriğini temel alınan dosyaya veya cihaza yazar ve arabellek atılır. Akış okuma modunda açıldıysa veya akışın arabelleği yoksa çağrısının fflush
hiçbir etkisi olmaz ve arabellek korunur. Çağrısı, fflush
akış için önceki herhangi bir çağrının ungetc
etkisini azaltır. Çağrıdan sonra akış açık kalır.
ise stream
NULL
, davranış her açık akışta çağrısıyla fflush
aynıdır. Yazma modunda açılan tüm akışlar ve son işlemin yazma olduğu güncelleştirme modunda açılan tüm akışlar boşaltılır. Çağrının diğer akışlar üzerinde hiçbir etkisi yoktur.
Arabellekler normalde işletim sistemi tarafından korunur ve bu da verileri diske otomatik olarak yazmanın en uygun zamanını belirler: arabellek dolduğunda, akış kapatıldığında veya bir program akışı kapatmadan normal şekilde sonlandırıldığında. Çalışma zamanı kitaplığının diske işleme özelliği, kritik verilerin işletim sistemi arabellekleri yerine doğrudan diske yazıldığından emin olmanıza olanak tanır. Mevcut bir programı yeniden yazmadan, programın nesne dosyalarını ile COMMODE.OBJ
bağlayarak bu özelliği etkinleştirebilirsiniz. Sonuçta elde edilen yürütülebilir dosyada, diske tüm arabelleklerin içeriğini yazmak için _flushall
çağrılar. Yalnızca _flushall
ve fflush
tarafından etkilenir COMMODE.OBJ
.
Diske işleme özelliğini denetleme hakkında bilgi için bkz . Akış G/Ç, fopen
ve _fdopen
.
Bu işlev çağıran iş parçacığını kilitler ve bu nedenle iş parçacığı güvenlidir. Kilitlenmeyen bir sürüm için bkz _fflush_nolock
. .
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
İşlev | Gerekli başlık |
---|---|
fflush |
<stdio.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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