Linux程序控制(二)exec

2021-08-24 18:01:28 字數 1049 閱讀 3701

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