Linux之exec函式族

2021-10-08 09:37:42 字數 3182 閱讀 1546

fork函式建立子程序後執行的是和父程序相同的程式(但有可能執行不同的**分支),子程序往往要呼叫一種exec函式以執行另乙個函式。當程序呼叫一種exec函式時,該程序的使用者空間**和資料完全被新程式替換,從新程式的啟動例程開始執行。呼叫exec並不建立新程序,所以呼叫exec前後該程序的id並沒改變

將當前的程序.text、.data替換為所要載入的程式的.text、.data,然後讓程序從新的.text第一條指令開始執行,但程序id不變,換核不換殼

其中有六種以exec開頭的函式,統稱exec函式

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)

;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)

;

【載入乙個程序,借助path環境變數】

int

execlp

(const

char

*file,

const

char

*arg,...);

【返回值】成功:無返回;失敗:-1

【引數一】要載入的程式的名字。該函式需要配合path環境變數來使用,當path中所有目錄搜尋後沒有引數一則出錯返回

該函式通常用來呼叫系統程式。如:ls、date、cp、cat等命令

【載入乙個程序,通過 路徑+程式名 來載入】

int

execl

(const

char

*path,

const

char

*arg,...);

【返回值】成功:無返回;失敗:-1

#include

#include

intmain()

else

if(pid >0)

else

return0;

}

【比較】

execlp

("ls"

,"ls"

,"/"

,"-l"

,null);

//使用程式名在path中搜尋

execl

("/bin/ls"

,"ls"

,"/"

,"-l"

,null);

//使用引數一給的絕對路徑搜尋

execl

("./while"

,"ls"

,"/home/wlr"

,"-l"

,null);

//執行自定義程式

【練習】將當前目錄的ls資訊,列印到檔案中

這裡會用到dup2函式,簡單介紹一下dup2函式

//exec函式只有呼叫失敗才會返回,呼叫成功便不會執行exec後面的**

exec函式一旦呼叫成功即執行新的程式,不返回。只有失敗才返回,錯誤值為-1.所以我們通常直接在exec函式呼叫後直接呼叫perror()和exit(),無須if判斷

【exec函式族字尾】

-l(

list

):命令列引數-p

(path

):搜尋file時使用path變數-v

(vector

):使用命令列引數陣列-e

(environment

):使用環境變數陣列,不使用程序原有的環境變數,設定新引導程式執行的環境變數

事實上,只有execve是真正的系統呼叫,其他五個函式最終都呼叫execve。這些函式之間關係如下

Linux 程序 exec函式族

其他exec 函式 練習拓展dup2 dup to 函式 一 exec的簡介 1.fork建立程序後執行的是和父程序相同的程式 但有可能執行不同的 分支 子程序往往要呼叫一種exec函式執行另一種程式。當程序呼叫一種exec函式時,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執...

Linux程序 exec族函式

1 為什麼要使用exec族函式 當我們fork乙個子程序就是為了執行乙個新的程式,此時可以呼叫exec族函式,執行已經編譯好的可執行程式或者linux自帶的ls cd等命令。2 exec族函式如何使用 函式原型 include extern char environ intexecl const c...

linux下exec函式族

1.1 exec函式族相關函式 include extern char environ int execl const char path,const char arg,char null int execlp const char file,const char arg,char null int...