題目:
請問下面的程式一共輸出多少個」-「
#include
#inlcude
int main()
return
0;}
可能開始的時候大家都以為會輸出6個」-「,但是結果輸出了8個」-「.
要弄明白這個題,還是先從fork()呼叫開始
1:fork()系統呼叫是unix下以自身程序建立子程序的系統呼叫,一次呼叫,兩次返回,如果返回時0,則是子程序,如果返回值》0,則是父程序(返回值是子程序的pid),
2:在fork()的呼叫過程中,整個父程序空間都會被子程序繼承,包括指令,變數值,程式呼叫棧,環境變數,緩衝區,等等.
第一種:不帶」\n」
我們再通過圖形來分析下:
第二種:加上」\n」
,輸出6個」-「.為什麼呢?
因為程式遇到」\n」或者是eof,或者緩衝區滿,或是檔案描述符關閉,或是主動flush,或是程式退出,就會把資料刷出緩衝區,需要注意的是,標準撥出是行緩衝,所以遇到」\n」的時候回刷出緩衝區,當然可以使用setvbuf來設定緩衝區大小,或者是fflush刷快取.
本文參考
乙個fork的面試題
前兩天有人問了個關於unix的fork 系統呼叫的面試題,這個題正好是我大約十年前找工作時某公司問我的乙個題,我覺得比較有趣,寫篇文章與大家分享一下。這個題是這樣的 題目 請問下面的程式一共輸出多少個 12 3456 78910 1112 1314 include include include i...
乙個fork的面試題
1 inti 2for i 0 i 2 i 67 wait null 8wait null 910 return 0 問上述程式會列印出多少個 我當時認為是6個啊,這還用問?嗨。原來fork呼叫的時候已經把printf中的 放在快取區中了,而且沒有flush,即沒有重新整理緩衝區。所以父子程序各複製...
fork的面試題
一 fork入門知識 乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事。但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。...