久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

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

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

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

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

首先(xian)我(wo)們知(zhi)道,在進(jin)(jin)程(cheng)(cheng)(cheng)內調(diao)用(yong)(yong)fork之后(hou)(hou),如果調(diao)用(yong)(yong)成(cheng)功(gong)會(hui)怎樣(yang)啊?沒錯,他會(hui)創建出(chu)一(yi)(yi)個子(zi)進(jin)(jin)程(cheng)(cheng)(cheng),但是(shi)(shi)創建出(chu)來(lai)的(de)(de)這(zhe)個子(zi)進(jin)(jin)程(cheng)(cheng)(cheng)在哪(na)里呢(ni)(ni)?這(zhe)里呢(ni)(ni)就(jiu)涉及到了進(jin)(jin)程(cheng)(cheng)(cheng)結構的(de)(de)組成(cheng)知(zhi)識。首先(xian)我(wo)們來(lai)看(kan),一(yi)(yi)個進(jin)(jin)程(cheng)(cheng)(cheng)在虛擬(ni)地址上由低到高(gao)依次存儲著(zhu)正文(wen)段(duan)(duan)(duan)(duan)(duan),數(shu)據(ju)段(duan)(duan)(duan)(duan)(duan)(這(zhe)里我(wo)們把初(chu)始化和未(wei)初(chu)始化的(de)(de)數(shu)據(ju)統(tong)稱為數(shu)據(ju)段(duan)(duan)(duan)(duan)(duan)),和堆(dui)棧(zhan)段(duan)(duan)(duan)(duan)(duan),主要呢(ni)(ni)是(shi)(shi)這(zhe)三個段(duan)(duan)(duan)(duan)(duan)。那(nei)(nei)我(wo)們說正文(wen)段(duan)(duan)(duan)(duan)(duan),它有著(zhu)只讀共享的(de)(de)屬性。也(ye)就(jiu)是(shi)(shi)說,對于一(yi)(yi)個程(cheng)(cheng)(cheng)序,我(wo)們可以多(duo)次運(yun)行,但是(shi)(shi)它們運(yun)行起來(lai)卻是(shi)(shi)不(bu)同(tong)的(de)(de)進(jin)(jin)程(cheng)(cheng)(cheng)。那(nei)(nei)這(zhe)些不(bu)同(tong)的(de)(de)進(jin)(jin)程(cheng)(cheng)(cheng)是(shi)(shi)不(bu)是(shi)(shi)共享著(zhu)同(tong)一(yi)(yi)個正文(wen)段(duan)(duan)(duan)(duan)(duan)啊。那(nei)(nei)我(wo)們的(de)(de)fork函數(shu)也(ye)一(yi)(yi)樣(yang),在進(jin)(jin)程(cheng)(cheng)(cheng)調(diao)用(yong)(yong)fork函數(shu)之后(hou)(hou),子(zi)進(jin)(jin)程(cheng)(cheng)(cheng)產生,子(zi)進(jin)(jin)程(cheng)(cheng)(cheng)與(yu)調(diao)用(yong)(yong)fork的(de)(de)進(jin)(jin)程(cheng)(cheng)(cheng),也(ye)就(jiu)是(shi)(shi)父進(jin)(jin)程(cheng)(cheng)(cheng)共享著(zhu)同(tong)一(yi)(yi)個正文(wen)段(duan)(duan)(duan)(duan)(duan)。在fork函數(shu)成(cheng)功(gong)返回之后(hou)(hou),也(ye)就(jiu)是(shi)(shi)有兩個進(jin)(jin)程(cheng)(cheng)(cheng)同(tong)時運(yun)行著(zhu)同(tong)一(yi)(yi)個正文(wen)段(duan)(duan)(duan)(duan)(duan)。我(wo)們來(lai)看(kan)一(yi)(yi)下下面這(zhe)段(duan)(duan)(duan)(duan)(duan)注釋:

pid = fork();

if(pid < 0)

{

perror{};

exit(1);

}

/* 此時有兩個(ge)程(cheng)序運(yun)行(xing)到這 */

else if(pid == 0)

{

/*子進(jin)程代碼(ma)*/

}else

{

/*父(fu)進程代(dai)碼*/

}

我們(men)來看(kan)上面這(zhe)段代碼的(de)(de)(de)(de)注(zhu)(zhu)釋(shi),也(ye)就是(shi)說(shuo)在(zai)(zai)fork成功返(fan)回(hui)之后,會(hui)有兩個程(cheng)序(xu)同時(shi)運行到 /*此時(shi)有兩個程(cheng)序(xu)運行到這(zhe)*/這(zhe)個注(zhu)(zhu)釋(shi)處,此時(shi)父(fu)子(zi)進(jin)(jin)程(cheng)里的(de)(de)(de)(de)fork便(bian)已(yi)經返(fan)回(hui)了不(bu)同的(de)(de)(de)(de)值。在(zai)(zai)父(fu)進(jin)(jin)程(cheng)中,父(fu)進(jin)(jin)程(cheng)的(de)(de)(de)(de)fork返(fan)回(hui)了一個大于(yu)(yu)0的(de)(de)(de)(de)數,我們(men)都(dou)知道那(nei)是(shi)子(zi)進(jin)(jin)程(cheng)的(de)(de)(de)(de)PID;在(zai)(zai)子(zi)進(jin)(jin)程(cheng)中,子(zi)進(jin)(jin)程(cheng)的(de)(de)(de)(de)fork返(fan)回(hui)了一個0,表示此進(jin)(jin)程(cheng)是(shi)由別(bie)的(de)(de)(de)(de)進(jin)(jin)程(cheng)fork出(chu)來的(de)(de)(de)(de)。那(nei)我們(men)的(de)(de)(de)(de)父(fu)子(zi)進(jin)(jin)程(cheng)都(dou)會(hui)接著向下(xia)(xia)運行,判(pan)斷(duan)下(xia)(xia)面的(de)(de)(de)(de)else if。在(zai)(zai)父(fu)進(jin)(jin)程(cheng)中,由于(yu)(yu)fork返(fan)回(hui)值大于(yu)(yu)0,故else if(pid == 0)這(zhe)個判(pan)斷(duan)語(yu)句不(bu)成立(li),然后執行下(xia)(xia)面的(de)(de)(de)(de)else里面的(de)(de)(de)(de)代碼。在(zai)(zai)子(zi)進(jin)(jin)程(cheng)中,pid是(shi)等于(yu)(yu)0的(de)(de)(de)(de),也(ye)就是(shi)說(shuo)子(zi)進(jin)(jin)程(cheng)在(zai)(zai)判(pan)斷(duan)了else if(pid == 0)條(tiao)(tiao)件(jian)后發現條(tiao)(tiao)件(jian)成立(li),然后它去(qu)執行里面的(de)(de)(de)(de)代碼。這(zhe)樣(yang)的(de)(de)(de)(de)fork框架(jia)就可(ke)以讓我們(men)父(fu)子(zi)進(jin)(jin)程(cheng)在(zai)(zai)同一個正(zheng)文段中區分各自進(jin)(jin)程(cheng)的(de)(de)(de)(de)代碼塊。

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

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

下一篇:BLE協議棧

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

回到頂部