国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > fork函數(shù)的小誤區(qū)

fork函數(shù)的小誤區(qū) 時(shí)間:2018-08-16      來(lái)源:未知

對(duì)于fork這個(gè)函數(shù)相信大家都不陌生。我們知道他會(huì)創(chuàng)建一個(gè)子進(jìn)程,返回兩個(gè)值,也有fork會(huì)返回兩次這么個(gè)說(shuō)法。那今天在這里我們就來(lái)整理一下對(duì)這個(gè)函數(shù)的認(rèn)識(shí)。

對(duì)于fork會(huì)返回兩次這個(gè)說(shuō)法我不知道大家都是怎么理解的,“返回一次然后又返回了一次”,在剛接觸這個(gè)函數(shù)的時(shí)候有許多同學(xué)都是這樣認(rèn)為的。那在這里呢我們就來(lái)對(duì)這個(gè)說(shuō)法進(jìn)行一下剖析。

首先我們知道,在進(jìn)程內(nèi)調(diào)用fork之后,如果調(diào)用成功會(huì)怎樣啊?沒(méi)錯(cuò),他會(huì)創(chuàng)建出一個(gè)子進(jìn)程,但是創(chuàng)建出來(lái)的這個(gè)子進(jìn)程在哪里呢?這里呢就涉及到了進(jìn)程結(jié)構(gòu)的組成知識(shí)。首先我們來(lái)看,一個(gè)進(jìn)程在虛擬地址上由低到高依次存儲(chǔ)著正文段,數(shù)據(jù)段(這里我們把初始化和未初始化的數(shù)據(jù)統(tǒng)稱(chēng)為數(shù)據(jù)段),和堆棧段,主要呢是這三個(gè)段。那我們說(shuō)正文段,它有著只讀共享的屬性。也就是說(shuō),對(duì)于一個(gè)程序,我們可以多次運(yùn)行,但是它們運(yùn)行起來(lái)卻是不同的進(jìn)程。那這些不同的進(jìn)程是不是共享著同一個(gè)正文段啊。那我們的fork函數(shù)也一樣,在進(jìn)程調(diào)用fork函數(shù)之后,子進(jìn)程產(chǎn)生,子進(jìn)程與調(diào)用fork的進(jìn)程,也就是父進(jìn)程共享著同一個(gè)正文段。在fork函數(shù)成功返回之后,也就是有兩個(gè)進(jìn)程同時(shí)運(yùn)行著同一個(gè)正文段。我們來(lái)看一下下面這段注釋?zhuān)?/p>

pid = fork();

if(pid < 0)

{

perror{};

exit(1);

}

/* 此時(shí)有兩個(gè)程序運(yùn)行到這 */

else if(pid == 0)

{

/*子進(jìn)程代碼*/

}else

{

/*父進(jìn)程代碼*/

}

我們來(lái)看上面這段代碼的注釋?zhuān)簿褪钦f(shuō)在fork成功返回之后,會(huì)有兩個(gè)程序同時(shí)運(yùn)行到 /*此時(shí)有兩個(gè)程序運(yùn)行到這*/這個(gè)注釋處,此時(shí)父子進(jìn)程里的fork便已經(jīng)返回了不同的值。在父進(jìn)程中,父進(jìn)程的fork返回了一個(gè)大于0的數(shù),我們都知道那是子進(jìn)程的PID;在子進(jìn)程中,子進(jìn)程的fork返回了一個(gè)0,表示此進(jìn)程是由別的進(jìn)程fork出來(lái)的。那我們的父子進(jìn)程都會(huì)接著向下運(yùn)行,判斷下面的else if。在父進(jìn)程中,由于fork返回值大于0,故else if(pid == 0)這個(gè)判斷語(yǔ)句不成立,然后執(zhí)行下面的else里面的代碼。在子進(jìn)程中,pid是等于0的,也就是說(shuō)子進(jìn)程在判斷了else if(pid == 0)條件后發(fā)現(xiàn)條件成立,然后它去執(zhí)行里面的代碼。這樣的fork框架就可以讓我們父子進(jìn)程在同一個(gè)正文段中區(qū)分各自進(jìn)程的代碼塊。

那現(xiàn)在我們?cè)賮?lái)看這個(gè)“fork會(huì)返回兩次”的說(shuō)法還嚴(yán)謹(jǐn)嗎?沒(méi)錯(cuò),我們fork也是只會(huì)返回一次的,只不過(guò)在不同的進(jìn)程中(調(diào)用者和被創(chuàng)建者)它返回的值不一樣罷了,然后由于共用同一個(gè)正文段,所以會(huì)給我們?cè)斐煞祷貎纱蔚腻e(cuò)覺(jué)。

上一篇:Android串口調(diào)試助手實(shí)現(xiàn)

下一篇:BLE協(xié)議棧

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部