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 , _closeve _write gibi _opendüşük düzey G/Ç yordamları kullanmak en güvenlidir.

Açıklamalar

fflush işlevi akışı streamtemizler. 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.OBJbağ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/Ç, fopenve _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

Ayrıca bkz.

Akış G/Ç
fclose, _fcloseall
_flushall
setvbuf