13程序學習之exec函式族及其相關使用例子

2021-10-10 04:29:10 字數 3122 閱讀 1737

1 下面給出exec函式族的6個相關函式宣告

1)execlp函式。

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

intexeclp

(const

char

*file,

const

char

*arg,..

.);//成功:無返回;失敗:-1

//引數1:要執行可執行檔案的名字,路徑預設從path中尋找,當path中所有目錄搜尋後沒有引數1則出錯返回。

//引數2:從argc[0]起,第乙個也為可執行檔名,後面為可執行檔案的命令引數選項,類似main函式的引數,並非是函式中的形參。

//最後必須用null結束表示輸入引數完成。(下面的同理)

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

例如execlp

("ls"

,"ls"

,"-h"

,null

);

2)execl函式。

//載入乙個程序,通過 絕對路徑或者相對路徑 載入。 

intexecl

(const

char

*path,

const

char

*arg,..

.);//成功:無返回;失敗:-1

例如execl

("/bin/ls"

,"ls"

,"-l"

,"-f"

,null);

//使用引數1給出的絕對路徑搜尋。

3)由於一般exec函式我們只使用到上面兩個比較多,並且用法都差不多,所以下面直接給出其餘四個的宣告,同樣返回值也是出錯才返回,成功不返回,引數使用實際一樣,只不過某些變成了主函式的形式char *const ar**,但用法一樣,同樣輸入多個引數即可。

int

execle

(const

char

*path,

const

char

*arg,..

.,char

*const envp)

;int

execv

(const

char

*path,

char

*const ar**)

;int

execve

(const

char

*path,

char

*const ar**,

char

*const envp)

;int

execvp

(const

char

*file,

char

*const ar**)

;

2 exec函式族的部分函式使用習題由於 execlp,execl用得比較多且其餘用法基本一樣,所以這裡只給出這兩個函式的使用習題例子。實際上也是同乙個程式,換個函式即可嘛。

1)測試execlp。

#include

#include

#include

intmain

(void

)else

if(pid >0)

else

return0;

}

結果,可以看到成功列印了當前目錄下的檔案。

2)測試execl函式,這個函式需要絕對路徑或者相對路徑。

**:將上面的execlp注釋然後換成execl函式即可。

//execlp("ls","ls","-h",null);

execl

("./main"

,"main"

,null);

//執行我自己本地的可執行程式

自己本地的程式main.c

#include

intmain()

通過makefile後,執行結果如下,可以看到,execl成功的呼叫了我本地的程序,實際上這種方法就是我們bash終端程序呼叫我們某個路徑的程式。

結果:

3)測試execvp函式。

**:換成execvp函式並使用字串陣列形式即可。

//execlp("ls","ls","-h",null);

//execl("./main","main",null); //執行我自己本地的可執行程式

char

*ar**=

;//陣列用法

execvp

("ls"

,ar**)

;

結果,可以看到陣列和arg多參形式是同樣的結果。

3 注意

某些程式在使用時可能需要用到open函式開啟檔案,而exec函式族是不會返回的,這就導致開啟的檔案描述符無法**,一般這種情況需要使用訊號去捕捉去進行close開啟的檔案。

#include

#include

#include

intmain

(void

)//將螢幕輸出的內容重定向至該開啟的檔案

dup2

(fd,stdout_fileno)

;execlp

("ls"

,"ls"

,"-h"

,null);

printf

("execlp failed.\n");

//close(fd);不會被執行

return0;

}

程序 exec函式族

一 exec函式族 通過呼叫exec函式族實現讓父子程序執行不同的程式,父程序不會受影響。exec函式族,就是以exec為開頭的函式,比如execl函式 execlp函式等,所以稱它為exec函式族。l list 命令列引數列表 p path 搜尋file時的使用的path變數 v vector向量...

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...