因為父程序通過fork()建立的子程序,與父程序執行相同程式,當我們想讓子程序執行不同的程式時,就需要使用exec函式將子程序與新程式替換
程序程式替換需要注意幾點
exec 函式族 其中引數有差異,底層原理差不多相同
exrcl 中的l意為 list,這個exec函式是乙個可變引數列表的函式
函式功能
execl
可變引數列表的函式
execlp
自動從path路徑中找到可執行程式
execle
需要傳入代替換程式路徑,需要程式設計師自己管理環境變數
引數的含義依次是:替換的程式路徑,所要替換的程式,命令列引數,以null識別結束
execl
("/usr/bin/ls"
,"ls"
,"-l"
,null);
execlp
("./program"
,"program"
,null);
execle需要自定環境變數
char
* env[3]
=;env[0]
="path=/home/user/path"
;env[1]
="myenv=abc"
;env[2]
=null
;execle
("./program"
,"program"
,null
,env)
;
execv v意為陣列,命令列引數以陣列形式輸入
同型別函式有 execv() , execvp(),execve() 的特性與上面所給的**中功能相同
引數的含義依次是:替換的程式路徑,命令列引數陣列
char
* ar**[3]
=;ar**[0]
="program"
;ar**[1]
="-a"
;ar**[2]
=null
;//陣列中的最後乙個以null結尾
execv
("./program"
,ar**)
;如果在path環境變數中新增了當前路徑,則可以省略輸入路徑位址
execvp
("program"
,ar**)
關於exec函式族的轉化關係
程序程式替換
替換原理 用fork建立子程序後執行的是和父程序相同的程式,但有可能在執行不同的 分支,但是在實際情況中,我們通常希望子程序和父程序執行不同的程式,來提高效率,所以才有程式替換 子程序往往要呼叫一種exec函式用來執行另乙個程式,將 和資料替換為可執行檔案的 和資料,環境變數並不改變。當程序的使用者...
程序程式替換
程序程式替換並沒有建立新的程序 怎麼樣才算是新建了乙個程序?建立好task struct,再把task struct插到雙向鍊錶裡面,這才是建立好了乙個程序。所謂的程序程式替換就是把物理記憶體上的資料和 替換成了另外乙個磁碟上的可執行檔案的資料和 說白了,我們前面寫的一些程式都是把它編譯成乙個可執行...
Linux程序的程式替換
程式替換 假如作業系統正在執行某乙個程式,我們可以利用程式替換函式指定乙個新的程式,讓作業系統去執行我們新指定的程式。也就是這樣一種情形下,我們fork乙個程序,如果fork成功,子程序會和父程序執行相同的 而我們建立子程序是希望子程序執行指定的操作,所以需要執行exec族函式。程式替換函式 程式替...