色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > fork函數的小誤區

fork函數的小誤區 時間:2018-08-16      來源:未知

對于fork這個函數相信大家都不陌生。我們知道他會創建一個子進程,返回兩個值,也有fork會返回兩次這么個說法。那今天在這里我們就來整理一下對這個函數的認識。

對于fork會返回兩次這個說法我不知道大家都是怎么理解的,“返回一次然后又返回了一次”,在剛接觸這個函數的時候有許多同學都是這樣認為的。那在這里呢我們就來對這個說法進行一下剖析。

首先我們知道,在進程內調用fork之后,如果調用成功會怎樣啊?沒錯,他會創建出一個子進程,但是創建出來的這個子進程在哪里呢?這里呢就涉及到了進程結構的組成知識。首先我們來看,一個進程在虛擬地址上由低到高依次存儲著正文段,數據段(這里我們把初始化和未初始化的數據統稱為數據段),和堆棧段,主要呢是這三個段。那我們說正文段,它有著只讀共享的屬性。也就是說,對于一個程序,我們可以多次運行,但是它們運行起來卻是不同的進程。那這些不同的進程是不是共享著同一個正文段啊。那我們的fork函數也一樣,在進程調用fork函數之后,子進程產生,子進程與調用fork的進程,也就是父進程共享著同一個正文段。在fork函數成功返回之后,也就是有兩個進程同時運行著同一個正文段。我們來看一下下面這段注釋:

pid = fork();

if(pid < 0)

{

perror{};

exit(1);

}

/* 此時有兩個程序運行到這 */

else if(pid == 0)

{

/*子進程代碼*/

}else

{

/*父進程代碼*/

}

我們來看上面這段代碼的注釋,也就是說在fork成功返回之后,會有兩個程序同時運行到 /*此時有兩個程序運行到這*/這個注釋處,此時父子進程里的fork便已經返回了不同的值。在父進程中,父進程的fork返回了一個大于0的數,我們都知道那是子進程的PID;在子進程中,子進程的fork返回了一個0,表示此進程是由別的進程fork出來的。那我們的父子進程都會接著向下運行,判斷下面的else if。在父進程中,由于fork返回值大于0,故else if(pid == 0)這個判斷語句不成立,然后執行下面的else里面的代碼。在子進程中,pid是等于0的,也就是說子進程在判斷了else if(pid == 0)條件后發現條件成立,然后它去執行里面的代碼。這樣的fork框架就可以讓我們父子進程在同一個正文段中區分各自進程的代碼塊。

那現在我們再來看這個“fork會返回兩次”的說法還嚴謹嗎?沒錯,我們fork也是只會返回一次的,只不過在不同的進程中(調用者和被創建者)它返回的值不一樣罷了,然后由于共用同一個正文段,所以會給我們造成返回兩次的錯覺。

上一篇:Android串口調試助手實現

下一篇:BLE協議棧

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 性欧美xxxx视频在线观看| 精品久久久久久中文字幕| 欧美成人免费全部观看天天性色| 欧美激情精品久久久久久久变态| 国产97色在线| 亚洲一级免费视频| 久久久久久久久爱| 亚洲va久久久噜噜噜| 久久国产精品影片| 国产精品亚洲网站| www.亚洲成人| 国产精品久久久久久久久男 | 色偷偷综合社区| 欧美一区二区色| 亚洲色图激情小说| 欧美影院久久久| 最近2019免费中文字幕视频三| 人人做人人澡人人爽欧美| 亚洲欧洲自拍偷拍| 清纯唯美亚洲综合| 久久精品国产欧美激情| 国产色综合天天综合网| 精品久久久久久久久久久久久久| 国产主播喷水一区二区| 欧美性69xxxx肥| 日韩久久免费视频| 国产不卡av在线免费观看| 久久精品人人做人人爽| 亚洲一区二区三区在线视频| 欧美放荡办公室videos4k| 国产视频精品久久久| 欧美制服第一页| 成人97在线观看视频| 亚洲国产天堂久久国产91| 91av国产在线| 久久久精品视频成人| 亚洲第一偷拍网| 国产精品久久久av久久久| 欧美三级xxx| 日韩中文在线中文网在线观看 | 国产精品久久久久久久天堂|