1.描述
exec()函式族將當前程序映像替換為新的程序映像,程序id不變。
2.規律
exec函式族名字很相近,使用起來也很相近,它們的一般規律如下:
l (list) 命令列引數列表
p (path) 搜素file時使用path變數
v (vector) 使用命令列引數陣列
e (environment) 使用環境變數陣列,不使用程序原有的環境變數,設定新引導程式執行的環境變數
參考自linux應用程式設計 | exec函式族
3.標頭檔案
#include
extern
char
**environ;
4.宣告
int
execl
(const
char
*path,
const
char
*arg,..
./* (char *) null */);
intexeclp
(const
char
*file,
const
char
*arg,..
./* (char *) null */);
intexecle
(const
char
*path,
const
char
*arg,..
./*, (char *) null, char * const envp */);
intexecv
(const
char
*path,
char
*const ar**)
;int
execvp
(const
char
*file,
char
*const ar**)
;int
execvpe
(const
char
*file,
char
*const ar**,
char
*const envp)
;
5.引數
int
execl
(const
char
*path,
const
char
*arg,..
./* (char *) null */);
/*path 檔案的路徑
arg 執行的程式所需要的引數,可以有多個,以null結尾
*/
int
execlp
(const
char
*file,
const
char
*arg,..
./* (char *) null */);
/*file 檔名,會借助path搜尋
arg 執行的程式所需要的引數,可以有多個,以null結尾
*/
int
execle
(const
char
*path,
const
char
*arg,..
./*, (char *) null, char * const envp */);
/*path 檔案的路徑
arg 執行的程式所需要的引數,可以有多個,以null結尾
envp 替換的環境變數,原有環境變數將不起作用,以null結尾
*/
int
execv
(const
char
*path,
char
*const ar**)
;/*path 檔案的路徑
ar** 內容為執行程式所需要引數的陣列
*/
int
execvp
(const
char
*file,
char
*const ar**)
;/*file 檔名,會借助path搜尋
ar** 內容為執行程式所需要引數的陣列
*/
int
execvpe
(const
char
*file,
char
*const ar**,
char
*const envp)
;/*file 檔名,會借助path搜尋
ar** 內容為執行程式所需要引數的陣列
envp 替換的環境變數,原有環境變數將不起作用,以null結尾
*/
6.返回值
exec函式族僅在發生錯誤時返回。 返回值為-1,並適當設定errno。
7.例項
1.帶l的exec函式
這類函式有:execl,execlp,execle
具體說明:表示後邊的引數以可變引數的形式給出且都以乙個空指標結束。這裡特別要說明的是,程式名也是引數,所以第乙個引數就是程式名。
#include
#include
intmain()
2.帶p的exec函式
這類函式有:execlp,execvp
具體說明:表示第乙個引數無需給出具體的路徑,只需給出函式名即可,系統會在path環境變數中尋找所對應的程式,如果沒找到的話返回-1。
#include
#include
intmain()
3.帶v的exec函式
這類函式有:execv,execvp
具體說明:表示命令所需的引數以char *arg形式給出且arg最後乙個元素必須是null
#include
#include
intmain()
;execvp
("ls"
, ar**)
;printf
("process end...\n");
return0;
}
4.帶e的exec函式
這類函式有:execle
具體說明:將環境變數傳遞給需要替換的程序,原來的環境變數不再起作用。
//execle程式
#include
#include
intmain()
;execle
("./env"
,"env"
,null
, envp)
;printf
("process end...\n");
return0;
}
8.注意
在傳入程式的引數中arg[0]一般為程式的名字,所以file引數和arg[0]一般一樣。但在exec函式族中arg[0]這個位置隨便寫一般不會出現問題,以為所執行的程式一般都不會使用arg[0]這個引數,但如果引數被使用是會有影響的。
Linux C程式設計 exec函式簇
exec函式簇 在 linux 中程序要使用exec函式族 來啟動另乙個程式的執行 系統呼叫execve 對當前程序進行替換,替換者為乙個指定的程式,其引數包括檔名 filename 引數列表 argv 以及環境變數 envp exec函式族當然不止乙個,但它們大致相同,在 linux中,它們分別是...
exec函式族筆記
include extern char environ int execl const char path,const char arg,int execv const char path,char const argv int execle const char path,const char a...
exec族函式總結
1 execve為系統呼叫 其他的都是封裝的函式 l 引數列表 p 在環境變數path中尋找 v 引數陣列 e 替換環境變數列表 返回值 函式出錯 返回0 否則不反回 原來的使用者區已經被替換 只留下pcb所以沒有返回的地方 exec族函式只替換使用者區 但是對核心區的pcb也有一定的影響 詳見 a...