exec
函式族的作用是根據指定的檔名找到可執行檔案,並用它來取代呼叫程序的內容,換句話說,就是在呼叫程序內部執行乙個可執行檔案。
exec
函式族的函式執行成功後不會返回,因為呼叫程序的實體,包括**段,資料
段和堆疊等都已經被新的內容取代,只留下程序 id 等一些表面上的資訊仍保持原樣,頗有些神似「三十六計」中的「金蟬脫殼」。看上去還是舊的軀殼,卻已經注入了新的靈魂。只有呼叫失敗了,它們才會返回 -1,從原程式的呼叫點接著往下執行。
以execl
和execlp
為例。
標頭檔案
#include
extern
char
**environ;
intexecl
(const
char
*path,
const
char
*arg,..
./* (char *) null */);
intexeclp
(const
char
*file,
const
char
*arg,..
./* (char *) null */);
intexecle
(const
char
*path,
const
char
*arg,..
./*, (char *) null, char * const envp */);
intexecv
(const
char
*path,
char
*const ar**)
;int
execvp
(const
char
*file,
char
*const ar**)
;int
execvpe
(const
char
*file,
char
*const ar**,
char
*const envp)
;// l(list) 引數位址列表,以空指標結尾
// v(vector) 存有各引數位址的指標陣列的位址
// p(path) 按 path 環境變數指定的目錄搜尋可執行檔案
// e(environment) 存有環境變數字串位址的指標陣列的位址
函式原型
int
execl
(const
char
*path,
const
char
*arg,..
./* (char *) null */
);
函式引數:
返回值
示例如下:
#include
#include
intmain()
else
if(pid ==0)
// 父程序會執行for迴圈,子程序不會執行for
for(
int i =
0; i <
10; i++
)return0;
}
編譯執行
包含標頭檔案
#include
函式原型
int
execlp
(const
char
*file,
const
char
*arg,..
./* (char *) null */
);
函式引數:
返回值
在環境變數中,查詢指定的可執行檔案,找到則執行,找不到則執行不成功。
#include
#include
intmain()
else
if(pid ==0)
// 父程序會執行for迴圈,子程序不會執行for
for(
int i =
0; i <
10; i++
)return0;
}
編譯執行
一鍵三連是對我的支援與鼓勵!歡迎關注程式設計小鎮,每天漲一點新姿勢?。
linux系統程式設計 exec函式族
例項 include include include intmain void else if pid 1 else return0 hello.c 輸出自己pid和環境變數 include include extern char environ intmain void include inclu...
Linux系統程式設計 exec函式族
fork 建立子程序之後執行的是和父程序相同的程式 可能執行不同的 分支 子程序呼叫exec函式執行另一程式,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執行。exec並不傳建立新程序,所以呼叫exec前後該程序的id並未改變。exec函式族 int execl const c...
linux系統程式設計之exec函式族
linux函式exec函式族 這來函式是用來執行一些可執行檔案的,常用在fork出子程序後,在子程序中執行。也就是替換子程序的東西,子程序的東西全部被替換,但只是替換,不會產生乙個新的程序,程序的id號也不會改變。include extern char environ int execl const...