Apakah buffer akan secara otomatis dialihkan ke disk saat proses keluar?
Secara umum jawabannya tidak .
Itu tergantung pada perintah. Seperti jawaban lain menyebutkan, jika perintah tidak secara internal buffer data, semua data akan tersedia ketika perintah berakhir.
Tetapi sebagian besar, jika tidak semua, perpustakaan I / O standar melakukan buffer stdout secara default (sampai batas tertentu), dan memberikan jaminan yang berbeda tentang penyiraman otomatis buffer ketika aplikasi ditutup.
C menjamin bahwa jalan keluar yang normal akan mengguyur buffer . "Keluar normal" berarti yang exit
disebut - baik secara eksplisit, atau dengan kembali dari main
. Namun, jalan keluar yang abnormal dapat menghindari panggilan ini (dan karenanya meninggalkan buffer yang tidak terhalang).
Berikut ini contoh sederhana:
#include <signal.h>
#include <stdio.h>
int main() {
printf("test");
raise(SIGABRT);
}
Jika Anda mengkompilasi ini dan melaksanakannya, test
akan tidak selalu ditulis ke stdout.
Bahasa pemrograman lain bahkan memberikan jaminan lebih sedikit: Java, misalnya, tidak otomatis dihapus pada saat penghentian program . Jika buffer output berisi garis yang tidak ditentukan, maka mungkin akan hilang, kecuali System.out.flush()
disebut secara eksplisit.
Yang mengatakan, badan pertanyaan Anda menanyakan sesuatu yang sedikit berbeda: jika data masuk dalam file sama sekali , itu harus segera dilakukan setelah perintah berakhir (tunduk pada peringatan yang dijelaskan dalam jawaban lain).