fork()请问下面的程序一共输出多少个“A”?多少个-?
題目:請問下面的程序一共輸出多少個“-”?
#include #include #include int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0; }解析:一共輸出8個。
首先程序一開始,bash產(chǎn)生一個進程P1執(zhí)行此程序,P1進入程序。
當(dāng)i=0時:
fork()產(chǎn)生一個子進程P2,同時它自己輸出一個’-’。P2繼承P1的諸如環(huán)境變量,P2首現(xiàn)會輸出一個’-’。
當(dāng)i=1,會繼續(xù)執(zhí)行for循環(huán)—P2先fork()出一個子進程P3,同時再輸出一個’-’。
P3進程為P2的子進程,它會復(fù)制其父進程P2的指令,變量值,程序調(diào)用棧,環(huán)境變量,緩沖區(qū)等,它會輸出一個’-’。
此時P1進入程序后,當(dāng)i=1時,fork()產(chǎn)生另一個它的子進程P4,同時輸出一個’-’。P4同樣會輸出一個’-’。
我們正常分析覺得應(yīng)該產(chǎn)生6個’-’。
這是因為printf(“-”);語句有buffer,所以,對于上述程序,printf(“-”);把“-”放到了緩存中,在fork的時候,緩存被復(fù)制到了子進程空間,所以,就多了兩個,就成了8個,而不是6個。
因為這里P3會繼承P2的緩沖區(qū),其中有一個’-’,所以P3會輸出兩個’-’。
因為P4為P1的一個子進程它會繼承P1的緩沖區(qū),其中有一個’-’,所以P4會輸出兩個’-’。
若將程序改為:
則輸出六個。
總結(jié)
以上是生活随笔為你收集整理的fork()请问下面的程序一共输出多少个“A”?多少个-?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和平精英怎么切换第一人称
- 下一篇: 狭路相逢剧情介绍