Linux程序 exec族函式

2021-10-07 17:05:43 字數 2297 閱讀 6857

1、為什麼要使用exec族函式

當我們fork乙個子程序就是為了執行乙個新的程式,此時可以呼叫exec族函式,執行已經編譯好的可執行程式或者linux自帶的ls、cd等命令。

2、exec族函式如何使用

函式原型:

#include

extern

char

**environ;

intexecl

(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**)

;

引數說明:

path:可執行程式的路徑名

arg:可執行性程式的引數,第乙個arg是可執行性程式的檔名,第二個至最後乙個arg是可執行性程式的引數,若沒有引數必須以null結尾

file:可執行性程式的檔名

ar**[

]:可執行性程式的引數列表

3、exec族函式的理解比較

1)execl與execv:

execl是把引數列表依次寫入arg中,本質上是多個字串,必須以null結尾

execv是把引數列表存放到乙個字元陣列ar**中,一塊傳參

2)execl與execlp:

execl傳的是可執行性程式的路徑名

execlp傳的是可執行性程式的檔名,其路徑是根據環境變數path底下的檔案中查 找該檔名

相關環境變數指令:

whereis date 功能:查詢date指令的絕對路徑 /bin/date

echo $path 功能:當前環境變數

export path = $path:當前檔案路徑 功能:把當前檔案路徑放到環境變數中

環境變數說明:環境變數中的可執行性程式,可在任意資料夾下使用,敲寫該檔案 名便可執行可執行性程式,不用加 「 ./ 」 。

4、exevl函式demo說明

#include

#include

intmain()

printf

("after execl\n");

//若execl函式成功執行,此語句將不在執行

}

#include

intmain

(int argc,

char

**ar**)

return0;

}

//執行結果

before execl

ar**[

0] is test

ar**[

1] is 123

5、execlp函式demo說明

#include

#include

intmain()

return0;

}

//執行結果

system date show

thu jul 217:

48:17 cst 2020

6、execv函式demo說明

//函式原型:int execv( const char *path, char *const ar**); 

#include

#include

intmain()

;if(execv

("/bin/ps"

,ar**)==-

1)return0;

}

//執行結果

檢視當前程序

Linux 程序 exec函式族

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

程序 exec函式族

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

Linux程序之exec族函式

fork函式建立新程序後,經常會在新程序中呼叫exec函式去執行另外乙個程式。當程序呼叫exec函式時,該程序被完全替換為新程式。因為呼叫exec函式並不建立新程序,所以前後程序的id並沒有改變。原創鏈結 include include include 函式原型 int execl const ch...