fflush

Membersihkan aliran.

Sintaks

int fflush(
   FILE *stream
);

Parameter

stream
Penunjuk ke FILE struktur.

Nilai hasil

fflush mengembalikan 0 jika buffer berhasil dibersihkan. Nilai 0 juga dikembalikan dalam kasus di mana aliran yang ditentukan tidak memiliki buffer atau terbuka untuk dibaca saja. Nilai EOF pengembalian menunjukkan kesalahan.

Catatan

Jika fflush mengembalikan EOF, data mungkin telah hilang karena kegagalan penulisan. Saat menyiapkan handler kesalahan penting, paling aman untuk mematikan buffering dengan setvbuf fungsi atau menggunakan rutinitas I/O tingkat rendah seperti _open, , _closedan _write alih-alih fungsi I/O stream.

Keterangan

Fungsi membersihkan fflush aliran stream. Jika aliran dibuka dalam mode tulis, atau dibuka dalam mode pembaruan dan operasi terakhir adalah penulisan, fflush menulis konten buffer aliran ke file atau perangkat yang mendasar, dan buffer dibuang. Jika aliran dibuka dalam mode baca, atau jika aliran tidak memiliki buffer, panggilan untuk fflush tidak berpengaruh, dan buffer apa pun dipertahankan. Panggilan untuk fflush meniadakan efek panggilan sebelumnya untuk ungetc aliran. Aliran tetap terbuka setelah panggilan.

Jika stream adalah NULL, perilakunya sama dengan panggilan ke fflush pada setiap aliran terbuka. Semua aliran dibuka dalam mode tulis dan semua aliran dibuka dalam mode pembaruan di mana operasi terakhir adalah penulisan dibersihkan. Panggilan tidak berpengaruh pada aliran lain.

Buffer biasanya dikelola oleh sistem operasi, yang menentukan waktu optimal untuk menulis data secara otomatis ke disk: ketika buffer penuh, ketika aliran ditutup, atau ketika program berakhir secara normal tanpa menutup aliran. Fitur penerapan ke disk dari pustaka run-time memungkinkan Anda memastikan bahwa data penting ditulis langsung ke disk daripada ke buffer sistem operasi. Tanpa menulis ulang program yang ada, Anda dapat mengaktifkan fitur ini dengan menautkan file objek program dengan COMMODE.OBJ. Dalam file yang dapat dieksekusi yang dihasilkan, panggilan untuk _flushall menulis konten semua buffer ke disk. Hanya _flushall dan fflush dipengaruhi oleh COMMODE.OBJ.

Untuk informasi tentang mengontrol fitur commit-to-disk, lihat Stream I/O, fopen, dan _fdopen.

Fungsi ini mengunci utas panggilan dan oleh karena itu aman utas. Untuk versi non-penguncian, lihat _fflush_nolock.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Function Header yang diperlukan
fflush <stdio.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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

Baca juga

Streaming I/O
fclose, _fcloseall
_flushall
setvbuf