1、讓父子程序執行不相干的操作;也就是說,在乙個執行的程式a中,呼叫另外的應用程式b。
2、換核不換殼;exec族函式,能夠替換程序位址空間中的**段.text段(對應的堆、棧中的資料都會改變),重新填充新的**。
execl系列是變參函式
int execl(const char* path,const char* arg,...);
int execlp(const char* file,const char* arg,...);
int execle(const char* path,const char* arg,...,char* const envp);
execv系列是不變參函式
int execv(const char* path,char* const ar**);
int execvp(const char* file,char* const ar**);
int execve(const char* path,char* const ar**,char *const envp);
引用標頭檔案:#include
在執行exec族函式之前需要先fork();
返回值:如果exec族函式執行成功,則不返回;如果執行失敗,列印錯誤資訊,退出當前程序。
帶p的函式:執行path環境變數能夠搜尋到的程式,不用寫全路徑,一般是系統應用程式,如命令ls等。
帶e的函式:執行指定目錄下的應用程式(自己寫全路徑),一般用來執行自己寫的程式。
不帶e和p的函式:執行指定目錄下的應用程式(自己寫全路徑),一般用來執行自己寫的程式。
引數有char *const envp的:需要自己指明環境變數(預設查詢路徑)在envp陣列中;比如:char* const ps_envp = 。
例1、讓父程序迴圈輸出1~10,子程序執行hello程式
int main()
; int i = 0;
for(;i < 10; i++)//父程序數數
pid = fork();
if(pid == 0)//子程序呼叫hello程式
int j = 0;
for(;j < 3; j++)
return 0;
}
例2、讓父程序迴圈輸出1~10,子程序執行ls命令
int main();
int i = 0;
for(;i < 10; i++)//父程序數數
pid = fork();
if(pid == 0)//子程序呼叫ls
int j = 0;
for(;j < 3; j++)
return 0;
}
Linux系統程式設計 程序替換 exec 函式族
在 windows 平台下,我們可以通過雙擊執行可執行程式,讓這個可執行程式成為乙個程序 而在 linux 平台,我們可以通過.執行,讓乙個可執行程式成為乙個程序。但是,如果我們本來就執行著乙個程式 程序 我們如何在這個程序內部啟動乙個外部程式,由核心將這個外部程式讀入記憶體,使其執行起來成為乙個程...
Linux系統程式設計 程序替換 exec 函式族
在 windows 平台下,我們可以通過雙擊執行可執行程式,讓這個可執行程式成為乙個程序 而在 linux 平台,我們可以通過.執行,讓乙個可執行程式成為乙個程序。但是,如果我們本來就執行著乙個程式 程序 我們如何在這個程序內部啟動乙個外部程式,由核心將這個外部程式讀入記憶體,使其執行起來成為乙個程...
Linux系統程式設計 程序替換 exec 函式族
在 windows 平台下。我們能夠通過雙擊執行可執行程式。讓這個可執行程式成為乙個程序 而在 linux 平台。我們能夠通過.執行,讓乙個可執行程式成為乙個程序。可是,假設我們本來就執行著乙個程式 程序 我們怎樣在這個程序內部啟動乙個外部程式。由核心將這個外部程式讀入記憶體,使其執行起來成為乙個程...