exec函式族

exec函式族

exec函式族提供了一個在進程中啟動另一個程式執行的方法。它可以根據指定的檔案名稱或目錄名找到執行檔,並用它來取代原調用進程的數據段、代碼段和堆疊段,在執行完之後,原調用進程的內容除了進程號外,其他全部被新的進程替換了。另外,這裡的執行檔既可以是二進制檔案,也可以是Linux下任何可執行的腳本檔案。

概述

exec函式族提供了一個在進程中啟動另一個程式執行的方法。它可以根據指定的檔案名稱或目錄名找到執行檔,並用它來取代原調用進程的數據段、代碼段和堆疊段,在執行完之後,原調用進程的內容除了進程號外,其他全部被新的進程替換了。另外.這裡的執行檔既可以是二進制檔案,也可以是Linux下任何可執行的腳本檔案。

使用情況

使用exec函式族主要有兩種情況:

(1)當進程認為自己不能再為系統和用戶做出任何貢獻時,就可以調用exec函式族中的任意一個函式讓自己重生。

(2)如果一個進程想執行另一個程式,那么它就可以調用fork函式新建一個進程,然後調用exec函式族中的任意一個函式,這樣看起來就像通過執行應用程式而產生了一個新進程(這種情況非常普遍)。

exec函式族共有6種不同形式的函式。這6個函式可以劃分為兩組:

(1)execl、execle和execlp。

(2)execv、execve和execvp。

這兩組函式的不同在於exec後的第一個字元,第一組是l,在此稱,為execl系列;第二組是v,在此稱為execv系列。這裡的l是list(列表)的意思,表示exec1系列函式需要將每個命令行參數作為函式的參數進行傳遞;而v是vector(矢量)的意思,表示execv系列函式將所有函式包裝到一個矢量數組中傳遞即可。

exec函式的原型如下:

int execl(const char * path,const char * arg,…);

int execle(const char * path,const char * arg,char * const envp[]);

int execlp(const char * file,const char * arg,…);

int execv(const char * path,char * const argv[]);

int execve(const char * path,char * const argv[],char * const envp[]);

int execvp(const char * file,char * const argv[]);

參數說明:

path:要執行的程式路徑。可以是絕對路徑或者是相對路徑。在execv、execve、execl和execle這4個函式中,使用帶路徑名的檔案名稱作為參數。

file:要執行的程式名稱。如果該參數中包含“/”字元,則視為路徑名直接執行;否則視為單獨的檔案名稱,系統將根據PATH環境變數指定的路徑順序搜尋指定的檔案。

argv:命令行參數的矢量數組。

envp:帶有該參數的exec函式可以在調用時指定一個環境變數數組。其他不帶該參數的exec函式則使用調用進程的環境變數。

arg:程式的第0個參數,即程式名自身。相當於argv[O]。

…:命令行參數列表。調用相應程式時有多少命令行參數,就需要有多少個輸入參數項。注意:在使用此類函式時,在所有命令行參數的最後應該增加一個空的參數項(NULL),表明命令行參數結束。

返回值:一1表明調用exec失敗,無返回表明調用成功。

相關詞條

相關搜尋

熱門詞條

聯絡我們