當程序呼叫exec系列函式中的任乙個時,該程序使用者空間資源(正文、資料、堆、棧)完全由新程式替代。因為呼叫exec並不建立新程式,如果無特殊指示**,程序核心資訊基本不用修改
(1)execl函式宣告如下:
// from /usr/include/unistd.h
int execl(const char* path,const char* arg,...);
例子 : execl("/bin/ls","ls","-l","/home",(char*)0);
第乙個引數表示execl要執行的程式,第二個及以後的引數代表執行檔案時傳遞的引數列表,最後乙個引數必須是空指標。
(2)execle函式宣告如下:
// from /usr/include/unistd.h
int execle(const char* path,const char* arg,...);
例子:execle("/bin/ls","ls","-l","/home",(char*)0,env);
execle用來執行引數path代表的程式,第二個及以後的引數代表執行檔案時傳入引數列表,最後乙個引數必須指向乙個新的環境變數陣列,即新執行程式的環境變數。
(3)execlp函式宣告如下:
// from /usr/include/unistd.h
int execlp(const char* file,const char* arg,...);
例子:execlp("ls","ls","-l","/home",(char*)0);
execlp會在$path環境變數所指向的目錄中查詢檔案名為第乙個引數的程式,並執行它,第二個及以後的引數代表執行檔案時傳遞的引數列表,最後乙個引數必須是空指標。
(4)execv函式宣告如下:
// from /usr/include/unistd.h
int execv(const char* path,const char* argv);
例子:char* argv = ;
execv("/bin/ls",argv);
execv函式執行path路徑下的程式,第二個引數為陣列指標維護的程式引數列表,該陣列的最後乙個成員必須為null.
(5)execvp函式宣告如下:
// from /usr/include/unistd.h
int execvp(const char* file,const char* argv);
例子:char* argv = ;
execv("ls",argv);
execvp會在$path環境變數所指向的目錄中查詢檔案名為第乙個引數的程式,並執行它,第二個及以後的引數代表執行檔案時傳遞的引數列表,最後乙個引數必須是空指標。
(6)system函式宣告如下:
//from /usr/include/stdlib.h
int system(const char* command);
system函式用來建立新程序,直到程式結束後才繼續執行父程序。一般執行指令碼檔案
exec系列函式
1.exec家族一共有六個函式,分別是 1 int execl const char path,const char arg,2 int execle const char path,const char arg,char const envp 3 int execv const char path...
exec 系列函式
本質 用新的程式代替新的程序,可以指定要執行程式的檔案exec函式如下 intexecl const char path,const char arg,path 指定路徑 相對 絕對路徑 arg 相當於命令列引數,最後加上null。intexeclp const char file,const ch...
Linux之exec函式族
fork函式建立子程序後執行的是和父程序相同的程式 但有可能執行不同的 分支 子程序往往要呼叫一種exec函式以執行另乙個函式。當程序呼叫一種exec函式時,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執行。呼叫exec並不建立新程序,所以呼叫exec前後該程序的id並沒改變 ...