乙個fork的面試題

2022-08-16 00:33:24 字數 1031 閱讀 6460

1

inti;

2for(i=0; i<2; i++)67

wait(null);

8wait(null);910

return

0;

問上述程式會列印出多少個"-",我當時認為是6個啊,這還用問?嗨。原來fork呼叫的時候已經把printf中的"-"放在快取區中了,而且沒有flush,即沒有重新整理緩衝區。所以父子程序各複製了乙份"-",所以答案是8個。

下面這段**:

1

intmain()

211 printf("

before fork\n");

1213

if((pid=fork())<0

) else

if(pid==0

) else

2122 printf("

pid = %ld,globvar = %d, var = %d\n

",(long)getpid(),globvar,var

);23

24 exit(0

);25 }

執行./a.out,輸出如下

a write to stdout

before fork  //主程序在fork前就輸出了

pid = 855,globvar = 7, var = 89

pid = 854,globvar = 6, var = 88

很好理解,因為printf("before fork\n")中有回車符,回車符和eof都會重新整理緩衝區,所以在fork前緩衝區是空的。但是要是將輸出重定向到tmp.out檔案,則在程式推出前, printf的輸出都在緩衝區,程式推出前寫入檔案。

a write to stdout

before fork     //子程序的輸出

pid = 859,globvar = 7, var = 89

before fork  //父程序的輸出

pid = 858,globvar = 6, var = 88

乙個fork的面試題

題目 請問下面的程式一共輸出多少個 include inlcude int main return 0 可能開始的時候大家都以為會輸出6個 但是結果輸出了8個 要弄明白這個題,還是先從fork 呼叫開始 1 fork 系統呼叫是unix下以自身程序建立子程序的系統呼叫,一次呼叫,兩次返回,如果返回時...

乙個fork的面試題

前兩天有人問了個關於unix的fork 系統呼叫的面試題,這個題正好是我大約十年前找工作時某公司問我的乙個題,我覺得比較有趣,寫篇文章與大家分享一下。這個題是這樣的 題目 請問下面的程式一共輸出多少個 12 3456 78910 1112 1314 include include include i...

fork的面試題

一 fork入門知識 乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事。但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。...