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