4. 執行另乙個程式:exec系列函式
子程序經常要呼叫exec函式執行另乙個程式,程序id不變,exec系列函式有7種:
#include
int execl(const char *pathname, const char *arg0, ...);
int execv(const char *pathname, char *const argv);
int execle(const char *pathname, const char *arg0, ..., char *const envp);
int execve(const char *pathname, char *const argv, char *const envp);
int execlp(const char *filename, const char *arg0, ...);
int execvp(const char *filename, char *const argv);
int fexecve(int fd, char *const argv, char *const envp);
出錯返回-1,成功則不返回。
區別說明:
(1). 程式引數傳遞:l表示list,函式名帶l的函式每個命令列引數都為乙個單獨的引數,最後null結尾;
v表示vector,函式名帶v的函式先將引數構造為乙個指標陣列,再將該陣列的位址作為引數;
一般來說,新程式中的argv[0]設定為路徑名的檔名分量。
(2). 如何找到可執行程式:
函式名帶p,用檔名尋找:filename中有/,則相當於路徑名;沒有/,則從環境變數path包含的目錄中尋找該程式檔案;
函式名不帶p,則通過路徑名尋找;
fexecve使用檔案描述符為引數,呼叫程序使用檔案描述符驗證所需要的檔案並無競爭的執行該檔案;
(3). 是否傳遞環境表:
以e結尾的函式可以傳遞乙個指向環境字串指標陣列的指標。
(4). 相互關係:
execve是核心的系統呼叫,其餘是庫函式,最終都要呼叫該系統呼叫。
linux程序控制 exec系列
說是exec系統呼叫,實際上在linux中,並不存在乙個exec 的函式形式,exec指的是一組函式,一共有6個,分別是 include int execl const char path,const char arg,int execlp const char file,const char ar...
Linux程序控制 exec函式族
1 簡介 在linux中,並不存在exec 函式,exec指的是一組函式,一共有6個,分別是 include extern char environ int execl const char path,const char arg,int execlp const char file,const c...
Linux程序控制 exec函式族
1 簡介 在linux中,並不存在exec 函式,exec指的是一組函式,一共有6個,分別是 include extern char environ int execl const char path,const char arg,int execlp const char file,const c...