EnderUNIX Team.


EnderUNIX İpucu

Arkadaşıma gönder , Ana Sayfa

[ C/C++ ]

"fork() ve buffered STD I/O işlemleri" - Barış Şimşek - (2005-01-07 16:45:54)   [3104]

write() sistem çağrısı buffer edilmez. fork() dan önce çağrılan write, standart çıktıya bir defa yazar. Halbuki STDIO library si buffered'tır. Şöyleki: Terminal'e veya konsola bağlı standart çıktı(terminal ekranı gibi) satır(line) buffered tır. \n(newline) görünce veri çıktıya flush edilir. Diğer durumlarda ise tamamen buffer'lanır. Eğer programı interaktif olarak çalıştırmış isek printf satırı nın bir kopyası olur. Çünkü standart çıkış newline görülünce flush edilir. Fakat standart output u bir dosyaya yönlendirdiğimizde printf satırının iki kopyası olur.

printf, fork() dan önce çağrılıyor, fakat fork() çağrıldıktan sonra veri hala buffer da. Parent sürecin data space'i alt sürece sürece kopyalanırken bu buffer da kopyalanır. Hem parent hem de alt süreç standart I/O için aynı buffer a sahip olmuş olur. Alt sürece ait buffer exit tan hemen önce ana sürecin buffer'ına eklenir ve iki süreç sonlandığında flush edilir.

Arkadaşıma gönder , Ana Sayfa