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...