程序環境與程序控制 4 exec函式

2021-06-15 21:41:35 字數 1505 閱讀 4592

1. 函式宣告:

#include

int execl(const char *pathname, const char *arg0, ... /* (char *) 0 */);

int execv(const char *pathname, char *const argv );

int execle(const char *pathname, const char *arg0, ...

/* (char *)0, char *const envp */);

int execve(const char *pathname, char *const argv, char *const envp);

int execlp(const char *filename, const char *arg0, ... /* (char *) 0 */);

int execvp(const char *filename, char *const argv);

六個函式返回: 若出錯則為- 1,若成功則不返回.

這些函式之間的第乙個區別是前四個取路徑名作為引數, 後兩個則取檔名作為引數. 當指定filename作為引數時:

• 如果filename 中包含/, 則就將其視為路徑名.

• 否則就按path環境變數, 在有關目錄中搜尋可執行檔案.

第二個區別與參數列的傳遞有關(l表示表(list), v表示向量(vector)). 函式execl, execlp和execle要求將新程式的的每個命令列引數都說明為乙個單獨的引數. 這種參數列以空指標結尾.

對於另外三個函式execv, execvp和execve則應先構造乙個指向各引數的指標陣列, 然後將該陣列位址作為這三個函式的引數.

2. 這六個函式中, 只有execve是系統呼叫, 其他函式只是庫函式, 各種不同的實現, 最終還是要呼叫execve的.

execl的三個函式都是通過構造argv呼叫execv的三個不同函式, 而execvp試path字首呼叫execv, execv使用環境變數呼叫execve系統呼叫.

3. exec函式主要用於fork之後子程序呼叫, 實現多程序操作.

#include

#include

char *env = ;

int main()

本程式中, execle要求的引數是乙個程式路徑和乙個自定義的特定環境;

execlp要求的引數是乙個檔名, 並接收系統環境變數, 這裡的呼叫會繼承前面execle新增的環境.

4. exec注意事項:

最後乙個命令列引數之後要跟乙個空指標, 如果是0, 要強制轉換成(char *), 不然會報錯.

5. 方便記憶:

為了使這6個函式方便記憶, 下面用函式名中的字元說明一下:

l: 表示該函式取乙個參數列, 與v互斥.

v: 表示該函式取乙個argv向量.

e: 表示該函式取乙個envp陣列, 而不使用當前環境變數.

p: 表示該函式取filename作為引數, 並且用path環境變數尋找可執行檔案.

linux程序控制 exec系列

說是exec系統呼叫,實際上在linux中,並不存在乙個exec 的函式形式,exec指的是一組函式,一共有6個,分別是 include int execl const char path,const char arg,int execlp const char file,const char ar...

程序控制之exec函式

1.exec函式 include int execl const char pathname,const char arg0,char 0 int execv const char pathname,const char argv int execle const char pathname,con...

Linux程序控制(二)exec

4.執行另乙個程式 exec系列函式 子程序經常要呼叫exec函式執行另乙個程式,程序id不變,exec系列函式有7種 include int execl const char pathname,const char arg0,int execv const char pathname,char c...