日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fork()请问下面的程序一共输出多少个“A”?多少个-?

發布時間:2023/11/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fork()请问下面的程序一共输出多少个“A”?多少个-? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:請問下面的程序一共輸出多少個“-”?

#include #include #include int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0; }

解析:一共輸出8個。
首先程序一開始,bash產生一個進程P1執行此程序,P1進入程序。
當i=0時:
fork()產生一個子進程P2,同時它自己輸出一個’-’。P2繼承P1的諸如環境變量,P2首現會輸出一個’-’。
當i=1,會繼續執行for循環—P2先fork()出一個子進程P3,同時再輸出一個’-’。
P3進程為P2的子進程,它會復制其父進程P2的指令,變量值,程序調用棧,環境變量,緩沖區等,它會輸出一個’-’。
此時P1進入程序后,當i=1時,fork()產生另一個它的子進程P4,同時輸出一個’-’。P4同樣會輸出一個’-’。
我們正常分析覺得應該產生6個’-’。
這是因為printf(“-”);語句有buffer,所以,對于上述程序,printf(“-”);把“-”放到了緩存中,在fork的時候,緩存被復制到了子進程空間,所以,就多了兩個,就成了8個,而不是6個。
因為這里P3會繼承P2的緩沖區,其中有一個’-’,所以P3會輸出兩個’-’。
因為P4為P1的一個子進程它會繼承P1的緩沖區,其中有一個’-’,所以P4會輸出兩個’-’。
若將程序改為:

#include #include #include int main(void) {int i;for (i = 0; i<2; i++){fork();printf("-\n");}return 0; }

則輸出六個。

總結

以上是生活随笔為你收集整理的fork()请问下面的程序一共输出多少个“A”?多少个-?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。