Linux 之exec系列函式

2021-08-25 17:39:35 字數 1797 閱讀 8070

當程序呼叫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並沒改變 ...