第五章 程序 函式exec函式族

2021-10-25 07:45:28 字數 3657 閱讀 5505

exec函式是提供fork建立新的執行緒後,執行外部程式的乙個介面,當程序呼叫一種exec函式時,該程序執行的程式完全替換為新程式,且從新程式的main函式開始執行。因為exec不建立新的程序,所以前後的程序id不變。

int execl(const char * path,const char * arg0,…/* null */);

功能:該函式可以將path指定的路徑下的arg程式啟動起來,從main函式開始執行

引數:path要執行的可執行程式的路徑+名稱

arg0 要執行的可執行程式的第乙個引數

… 可執行程式的引數arg1,arg2 …,所有的引數最後必須以null結尾。

返回值:如果執行成功則函式不會返回, 執行失敗則直接返回-1, 失敗原因存於errno 中.

#include

#include

#include

intmain

(void

)

int execv(const char * path,char * const ar**);

功能:同上

引數:path 要執行的可執行程式的名稱+路徑

ar** 要執行的程式的引數陣列

返回值:如果執行成功則函式不會返回, 執行失敗則直接返回-1, 失敗原因存於errno 中.

#include

#include

#include

intmain

(void);

execv

("/bin/ls"

,filename1)

;printf

("exiting main process ----\n");

return0;

}

int execle(const char * path,const char * arg0,…/* null */,char *const envp );

功能:同上

引數:path 要執行的可執行程式的名稱+路徑

ar** 要執行的程式的引數陣列

envp 傳遞環境表資訊environ,乙個指向環境字串指標的指標陣列

返回值:如果執行成功則函式不會返回, 執行失敗則直接返回-1, 失敗原因存於errno 中.

#includeint execve(const char *filename, char *const ar**, char *const envp);
execve() – 叫做執行程式函式

就像python中的os.system(cmd)這個函式,我們可以用這個函式來執行我們的shell指令碼,單獨的shell命令,或者是呼叫其他的程式,我們的execve()這個函式就和python中的os.system函式類似,可以呼叫其他程式的執行,執行shell命令,,呼叫指令碼等等功能。

execve()執行程式由 filename決定。

filename必須是乙個二進位制的可執行檔案,或者是乙個指令碼以#!格式開頭的直譯器引數引數。如果是後者,這個直譯器必須是乙個可執行的有效的路徑名,但是不是指令碼本身,它將呼叫直譯器作為檔名。

ar**是要呼叫的程式執行的引數序列,也就是我們要呼叫的程式需要傳入的引數。

envp 同樣也是引數序列,一般來說他是一種鍵值對的形式 key=value. 作為我們是新程式的環境。

注意,ar** 和envp都必須以null指標結束。 這個引數向量和我們的環境變數都能夠被我們的main函式呼叫,比如說我們可以定義為下面這個形式:

int main(int argc, char *ar**, char *envp)
#include

#include

intmain()

;//命令和引數,記得要加null

相當於在/home目錄下執行了 ls -al

int execlp(const char *filename,const char * arg0,…);

功能:直接給出程式的名稱和引數即可呼叫啟動。

引數:filename要執行的可執行程式名稱,從path環境變數中查詢檔案並執行

如果filename中包含/,則就將其視為路徑名

否則就以path環境變數搜尋可執行檔案

arg0 …可執行程式的引數列表,想當與主函式傳參中的ar**[0]…;

返回值:如果執行成功則函式不會返回, 執行失敗則直接返回-1, 失敗原因存於errno 中.

#include

#include

#include

intmain

(int argc,

char

*ar**)

int fexecve(int fd,char *const ar**,char *const envp);

功能:以開啟的程式檔案描述符為啟動程式

引數:fd 要執行的可執行程式檔案描述符

ar** 可執行程式的引數陣列

envp 傳遞環境表資訊environ,乙個指向環境字串指標的指標陣列

返回值:如果執行成功則函式不會返回, 執行失敗則直接返回-1, 失敗原因存於errno 中.

通常,只有execve是核心的系統呼叫,其他6個都是庫函式

第五章 程序 函式fork

includepid t fork void 一次呼叫,兩次返回 詳情請參考fork的詳細用法 子程序和父程序繼續執行fork呼叫之後的指令 子程序是父程序的副本 子程序獲得父程序資料空間 堆和棧的副本 父子程序並不共享儲存空間 父子程序共享正文段 唯讀的 為了提高效率,fork後不並立即複製父程序...

程序 exec函式族

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

第五章 函式

第五章 函式 1 函式的定義 shell函式定義可以放在 bash profile 檔案中,也可以在使用該函式的指令碼中,還可以在命令列中 通過 source 或 執行bash profile檔案,使修改能夠立即生效 function 函式名 declare f 顯示定義的函式清單 export f...