1. 程式人生 > >exec函式族總結

exec函式族總結

看書上的關於exec函式的部分有點然,百度了一下各個函式,總結如下
1.execv函式:

#include <unistd.h>
int exevc(const char *pathname,char *const argv[]);

argv引數是一個以空指標結尾的陣列,即該數組裡面存放的是命令執行需要的引數,最後一個元素是NULL
並且測試過後,argv[0]裡面存放什麼對結果不影響,所以argv[0]應該存放的是名字,而引數在第二個及以後存放

2.execve函式

#include<unistd.h>
int execve(const char * filename,char
* const argv[ ],char * const envp[ ]);

execve()用來執行引數filename字串所代表的檔案路徑,第二個引數是利用指標陣列來傳遞給執行檔案,並且同樣需要以空指標(NULL)結束,最後一個引數則為傳遞給執行檔案的新環境變數陣列。
該函式如果執行成功則無返回值,執行失敗則直接返回-1,失敗原因存於errno 中。

3.execl函式

#include <unistd.h>
int execl(const char *path, const char *arg, ...);

函式成功無返回值,失敗返回-1,失敗原因存在errno中,可借perror打印出來
execl()其中字尾”l”代表list也就是引數列表的意思,第一引數path字元指標所指向要執行的檔案路徑, 接下來的引數代表執行該檔案時傳遞的引數列表:argv[0],argv[1]… 最後一個引數須用空指標NULL作結束。

4.execle函式

#include<unistd.h>
int execle(const char * path,const char * arg,....,char *const envp[]);

execl是用來執行引數path字串所代表的檔案路徑,併為新程式複製最後一個引數所指示的環境變數。接下來的引數代表執行該檔案時傳遞過去的argv(0)、argv[1]……,最後一個引數必須用空指標(NULL)作結束。
函式執行成功無返回值,失敗返回-1,失敗原因存於errno中

5.execvp函式

#include<unistd.h>
int execvp(const
char *file ,char * const argv []);

該函式會從PATH 環境變數所指的目錄中查詢符合引數file 的檔名,找到後便執行該檔案,然後將第二個引數argv傳給該欲執行的檔案。
如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno中。

6.execlp函式

#include<unistd.h>
int execlp(const char * file,const char * arg,....);

該函式會從PATH 環境變數所指的目錄中查詢引數file的檔名,找到後便執行該檔案,然後將第二個以後的引數當做該檔案的argv[0]、argv[1]……,最後一個引數必須用空指標(NULL)作結束。
如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno 中。

***1.***exec函式一共有六個,其中execve為核心級系統呼叫,其他四個函式( execl,execle,execlp,execv,execvp )都是呼叫execve的庫函式。
2.除了execlp()和execvp()函式外的四個函式都要求第一個引數是完整路徑,而這兩個可以簡單到僅僅是一個檔名,它倆會自動到PATH指定的目錄裡找
3.只有execle()和execve()有環境變數引數,其他四個不是不傳,而是預設環境變數不做修改,而這兩個會用指定的環境變數去替代預設的
(其實書上還有個exec函式錯誤表,但是我懶得總結了…大家到時候看errno的錯誤不知道的百度一下吧)