Dalam Program 1 Hello world
dicetak hanya sekali, tetapi ketika saya menghapus \n
dan jalankan (Program 2), hasilnya dicetak 8 kali. Dapatkah seseorang tolong jelaskan kepada saya pentingnya \n
di sini dan bagaimana pengaruhnya terhadap fork()
?
Program 1
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello world...\n");
fork();
fork();
fork();
}
Keluaran 1:
hello world...
Program 2
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello world...");
fork();
fork();
fork();
}
Keluaran 2:
hello world... hello world...hello world...hello world...hello world...hello world...hello world...hello world...
Jawaban yang Diterima:
Saat mengeluarkan ke keluaran standar menggunakan printf()
perpustakaan C fungsi, output biasanya buffer. Buffer tidak di-flush sampai Anda mengeluarkan baris baru, panggil fflush(stdout)
atau keluar dari program (bukan dengan memanggil _exit()
meskipun). Aliran keluaran standar secara default disangga baris dengan cara ini saat terhubung ke TTY.
Saat Anda melakukan fork proses di “Program 2”, proses anak mewarisi setiap bagian dari proses induk, termasuk buffer output yang tidak dibilas. Ini secara efektif menyalin buffer yang tidak dibilas ke setiap proses anak.
Ketika proses berakhir, buffer di-flush. Anda memulai total delapan proses (termasuk proses asli), dan buffer yang tidak dibilas akan dihapus pada penghentian setiap proses individu.
Ini delapan karena pada setiap fork()
Anda mendapatkan dua kali jumlah proses yang Anda miliki sebelum fork()
(karena mereka tidak bersyarat), dan Anda memiliki tiga di antaranya (2 =8).