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