Linux基礎 建立新程序

2021-10-21 18:07:43 字數 2406 閱讀 2021

好久沒學習了,最近都在忙著上班的事情,過年後這段時間感覺每天都有事情做,忙忙忙,學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核心建立新程序

計算機是一種精密的儀器,有一點錯誤都是不能成功執行的,計算機軟體是靠乙個個程式組成的,而程式又是一系列指令所組成。通過執行這樣的一條條指令,計算機就能完成乙個個任務了。這裡有兩個概念比較容易混淆,平時我們在學習計算機的時候也是這樣,那就是程序和程式的區別,這也是這篇部落格的主要內容,程序。簡單點講,...