Linux系統程式設計(十)exec 族函式

2021-10-13 19:52:29 字數 2462 閱讀 6034

exec函式族的作用是根據指定的檔名找到可執行檔案,並用它來取代呼叫程序的內容,換句話說,就是在呼叫程序內部執行乙個可執行檔案。

exec函式族的函式執行成功後不會返回,因為呼叫程序的實體,包括**段,資料

段和堆疊等都已經被新的內容取代,只留下程序 id 等一些表面上的資訊仍保持原樣,頗有些神似「三十六計」中的「金蟬脫殼」。看上去還是舊的軀殼,卻已經注入了新的靈魂。只有呼叫失敗了,它們才會返回 -1,從原程式的呼叫點接著往下執行。

execlexeclp為例。

標頭檔案

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