Linux程序的程式替換

2021-08-20 02:48:55 字數 1423 閱讀 1771

程式替換

假如作業系統正在執行某乙個程式,我們可以利用程式替換函式指定乙個新的程式,讓作業系統去執行我們新指定的程式。也就是這樣一種情形下,我們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函式是乙個可變引數列表的函式 函式功...