結合Unix中的緩衝理解fork

2021-09-22 19:45:44 字數 626 閱讀 4835

今天看到乙個有趣的程式:

#include

; #include

; main (

)

如果printf中沒有換行,那麼輸出是:

fork!i am the child process, my process id is 4286  

fork!i am the parent process, my process id is 4285

而如果printf中有換行,輸出是:

fork!  

i am the child process, my process id is 4286

i am the parent process, my process id is 4285

沒有換行的話,printf中的字串是儲存在緩衝區裡的,而且這裡乙個fork字串也不至於塞滿緩衝區,所以子程序拷貝父程序的資料時,把緩衝區的資料也拷貝進去了,所以會輸出兩個fork!。而如果換行的話,就會導致直接輸出,不會儲存在緩衝區裡,所以子程序也就沒有把父程序的緩衝區給拷貝進來,所以也就只能輸出1個fork!

結合getchar 理解緩衝區

目錄 1 getchar 明明只能獲取乙個鍵盤輸入的字元,為什麼當我們輸入乙個字元後,並沒有進行輸出,而是全部輸入後,才進行輸出?2 換行符後為什麼還有乙個換行符 ascii 為 10 illustration 當程式呼叫getchar 函式時,程式就等著使用者按鍵,並等使用者按下回車鍵返回。期間按...

Unix中的不帶緩衝的檔案IO

unix中的一切都是檔案 這是乙個相當經典的定義,在unix以及unix的衍生系統中這一概念都是成立的。說一切都是檔案,指的是在unix中任何東西都是用檔案來表示的。在unix中裝置是檔案,socket是檔案,fifo是檔案,管道.也是檔案。其實個人理解說unix中的一切都是檔案其實是說在unix中...

unix中的error全域性理解

unix中的獲取最後錯誤原因,一般都從errno得到,而且大部分書或者資料都說是全域性的 這個全域性的真不好理解,到底會不會程序 執行緒 安全的,答案應該是肯定的,因為看了不少程式都這麼用的,否則在這些程式中早就出問題了,那不是說全域性的,怎麼會沒問題呢?首先看下errno.h標頭檔案定義了 if ...