程式替換假如作業系統正在執行某乙個程式,我們可以利用程式替換函式指定乙個新的程式,讓作業系統去執行我們新指定的程式。也就是這樣一種情形下,我們fork乙個程序,如果fork成功,子程序會和父程序執行相同的**,而我們建立子程序是希望子程序執行指定的操作,所以需要執行exec族函式。
程式替換函式程式替換函式是一族函式,可以通過man命令進行檢視。
其中有六種以exec開頭的函式,統稱exec函式:(功能相同,引數不同)
#include
int execl(const
char *path, const
char *arg, ...); //庫函式
//引數:路徑,操作,以null結尾
int execlp(const
char *file, const
char *arg, ...); //庫函式
//引數:檔名,操作,null
int execle(const
char *path, const
char *arg, ..., char *const envp); //庫函式
//引數:路徑,操作,環境變數(空指標結尾)
int execv(const
char *path, char *const argv); //庫函式
//引數:路徑,argv(空指標結尾)
int execvp(const
char *file, char *const argv); //庫函式
//引數:檔名,argv(空指標結尾)
int execve(const
char *path, char *const argv, char *const envp); //系統呼叫
//最標準的系統呼叫,引數:路徑,argv,環境變數(空指標結尾)
函式解釋:
分類說明:
#include
int main();
ret = execle("./hello", "./hello", null, env);
char* const argv1 = ;
ret = execv("/bin/ls", argv1);
char* const argv2 = ;
ret = execvp("ls", argv2);
char* const argv3 = ;
ret = execve("./hello", argv3, env);
}
程序程式替換
替換原理 用fork建立子程序後執行的是和父程序相同的程式,但有可能在執行不同的 分支,但是在實際情況中,我們通常希望子程序和父程序執行不同的程式,來提高效率,所以才有程式替換 子程序往往要呼叫一種exec函式用來執行另乙個程式,將 和資料替換為可執行檔案的 和資料,環境變數並不改變。當程序的使用者...
程序程式替換
程序程式替換並沒有建立新的程序 怎麼樣才算是新建了乙個程序?建立好task struct,再把task struct插到雙向鍊錶裡面,這才是建立好了乙個程序。所謂的程序程式替換就是把物理記憶體上的資料和 替換成了另外乙個磁碟上的可執行檔案的資料和 說白了,我們前面寫的一些程式都是把它編譯成乙個可執行...
程序程式替換
因為父程序通過fork 建立的子程序,與父程序執行相同程式,當我們想讓子程序執行不同的程式時,就需要使用exec函式將子程序與新程式替換 程序程式替換需要注意幾點 exec 函式族 其中引數有差異,底層原理差不多相同 exrcl 中的l意為 list,這個exec函式是乙個可變引數列表的函式 函式功...