linux exec函式家族

2021-07-05 12:23:49 字數 1872 閱讀 7645

1.exec家族一共有六個函式,分別是:

(1)int execl(const char *path, const char *arg, ......);

(2)int execle(const char *path, const char *arg, ...... , char * const envp);

(3)int execv(const char *path, char *const argv);

(4)int execve(const char *filename, char *const argv, char *const envp);

(5)int execvp(const char *file, char * const argv);

(6)int execlp(const char *file, const char *arg, ......);

其中只有execve是真正意義上的系統呼叫,其它都是在此基礎上經過包裝的庫函式。

exec

函式族的作用是根據指定的檔名找到可執行檔案,並用它來取代呼叫程序的內容,換句話說,就是在呼叫程序內部執行乙個可執行檔案。這裡的可執行檔案既可以是二進位制檔案,也可以是任何linux下可執行的指令碼檔案。

與一般情況不同,exec函式族的函式執行成功後不會返回,因為呼叫程序的實體,包括**段,資料段和堆疊等都已經被新的內容取代,只留下程序id等一些表面上的資訊仍保持原樣,頗有些神似"三十六計"中的"金蟬脫殼"。看上去還是舊的軀殼,卻已經注入了新的靈魂。只有呼叫失敗了,它們才會返回乙個-1,從原程式的呼叫點接著往下執行。

2.它們之間的區別:

第乙個區別是:

前四個取路徑名做為引數,後兩個取檔名做為引數,如果檔名中不包含「/」則從path環境變數中搜尋可執行檔案,如果找到了乙個可執行檔案,但是該檔案不是連線編輯程式產生的可執行**檔案,則當做shell指令碼處理。

第二個區別:

前兩個和最後乙個函式中都包括「l 」這個字母,而另三個都包括「v 」," l "代表list即表,而" v "代表vector即向量,也是是前三個函式的引數都是以list的形式給出的,但最後要加乙個空指標,如果用常數0來表示空指標,則必須將它強行轉換成字元指標,否則有可能出錯。,而後三個都是以向量的形式給出,即陣列。

最後乙個區別:

與向新程式傳遞環境變數有關,如第二個和第四個以e結尾的函式,可以向函式傳遞乙個指向環境字串指標陣列的指標。即自個定義各個環境變數,而其它四個則使用程序中的環境變數。

3.例項講解:

(1)在平時的程式設計中,如果用到了exec函式族,一定記得要加錯誤判斷語句。先判斷execl的返回值,如果出錯,可以用perror( )函式列印出錯誤資訊。

如:if (execl(「path」,」..」」(char *)0) < 0)

如果呼叫出錯,可輸出:execl error!: 錯誤原因這樣可方便查詢出錯原因

(2)注意下面書寫格式:

先定義乙個指標陣列:char *argv=

用execv呼叫ls:    execv(「/bin/ls」,argv)

如果用execvp

execvp(

「ls」,argv)      //直接寫ls就可以了

注意:

execl

呼叫shell 時,要在shell指令碼中指明使用的shell版本:#!/bin/bash。在命令列下執行shell指令碼,系統為它自動開啟乙個shell,在程式中沒有shell,在呼叫shell指令碼時,會出錯,所以要在shell指令碼中先開啟shell。

linux exec函式家族

1.exec家族一共有六個函式,分別是 1 int execl const char path,const char arg,2 int execle const char path,const char arg,char const envp 3 int execv const char path...

linux exec函式族演示

就是呼叫系統的程式,自定義的指令碼不知為何有時不行。自定義二進位制檔案卻可以。1.execl list 列出引數列表 execl l是list 引數列表 include include include includeint main else if result 0 else return 0 執行...

printf家族函式

include int printf const char format,輸出到標準輸出 int fprintf file stream,const char format,輸出到檔案 int sprintf char str,const char format,輸出到字串str中 int snpr...