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
, , _close
dan _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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk