1inti;
2for(i=0; i<2; i++)67
wait(null);
8wait(null);910
return
0;
問上述程式會列印出多少個"-",我當時認為是6個啊,這還用問?嗨。原來fork呼叫的時候已經把printf中的"-"放在快取區中了,而且沒有flush,即沒有重新整理緩衝區。所以父子程序各複製了乙份"-",所以答案是8個。
下面這段**:
1intmain()
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 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。...