好久沒學習了,最近都在忙著上班的事情,過年後這段時間感覺每天都有事情做,忙忙忙,學linux感覺說實話,有點枯燥,比當初學fpga還要枯燥。真的是畢業之後,再去學習的動力就下降很多嗎。但是還是要堅持啊。。。
程式並不能單獨執行,只有將程式載入到記憶體中,系統為他分配資源後才能夠執行, 這種執行著的程式稱之為程序, 每個程序都有自己單獨的位址空間。
使用fork函式,相當於會將原來的程序進行複製,得到的新的程序和原始的進行基本一致。
fork函式在使用的時候,返回乙個pid_t的型別的值,在子程序當中,這個返回值是0,在父程序中,這個返回值是子程序的pid號。
pid_t fork
(void
);
以乙個具體的例子來演示一下:
#include
#include
#include
#include
intmain
(void
)else
if(result ==0)
else
return0;
}
使用fork函式可以建立乙個新的程序,但是這個建立的新的程序,和父程序幾乎有一樣的功能,幾乎是將父程序進行拷貝得到的。在只從fork函式之後,fork函式之後的**將會被執行兩次,分別是在父程序當中執行和在子程序當中被執行。
可以根據fork函式的返回值來判斷當前是父程序還是子程序,使用fork函式後,新程序和父程序都還是實現的相同的功能,想要更改子程序去執行不同的程式,可以使用exec函式來完成。
execl函式原型如下:
int
execl
(const
char
*path,
const
char
*arg,..
.)
path是新的程式所在的路徑,arg是需要給這個程式傳遞的引數。
exec系列函式是直接將當前程序給替換掉的, 當呼叫exec系列函式後,當前程序將不會再繼續執行, 因為當前程序已經被替換了。
exec系列函式函式是不會返回的,除非發生了錯誤。出現錯誤時,exec系列函式將返回-1,並且會設定錯誤變數error。
結合具體的例子來說明一下:
從程式的執行結果來看,在使用了execl函式之後,原來的程序將會被替換,並且新程序沒有出錯的時候,新程序是不會返回的,從原來的函式當中,最後有乙個列印提示測試結束的**並沒有被列印可以看出。
這樣execl就實現了程序的替換。
推出乙個程序的方法比較簡單,呼叫exit()函式或者_exit()函式就可以了。
#include
#include
#include
#include
intmain
(void
)else
if(result ==0)
else
return0;
}
在使用fork函式新建立了乙個程序的時候,有的時候,父程序希望知道子程序什麼時候結束,或者想要知道,子程序結束的時候的狀態,那麼這個時候就需要使用wait函式,來獲取子程序的推出狀態。
wait函式原型:
pid_t wait
(int
*wstatus)
;
需要引入的標頭檔案
i.mx6ull開發板資料
Linux建立新程序
在linux系統中,建立新程序涉及到兩個系統呼叫api 分別是fork 和exec 首先,在當前程序中,呼叫fork 複製出自身的乙個拷貝,此時主要涉及到核心中與程序上下文相關的資料複製操作,而使用者 和資料則採用寫時複製技術共享同乙份資源。當乙個程序複製後,原程序稱為父程序,新程序則稱為子程序.然...
linux建立新程序的過程
linux系統中建立新程序使用fork 系統呼叫。所有程序都是通過複製程序0而得到的。都是程序0的子程序。linux建立新程序的過程 1.系統首先在任務陣列中找出乙個還沒有被任何程序使用的空項。如果陣列已滿,沒有空項,則fork系統呼叫出錯返回。系統將會為新建程序在記憶體區中分配一頁記憶體來存放其任...
聊聊Linux核心建立新程序
計算機是一種精密的儀器,有一點錯誤都是不能成功執行的,計算機軟體是靠乙個個程式組成的,而程式又是一系列指令所組成。通過執行這樣的一條條指令,計算機就能完成乙個個任務了。這裡有兩個概念比較容易混淆,平時我們在學習計算機的時候也是這樣,那就是程序和程式的區別,這也是這篇部落格的主要內容,程序。簡單點講,...