59 程序之exec族函式

2021-08-17 21:11:28 字數 1714 閱讀 5300

fork建立子程序之後,子程序是乙個新的程式,巨集觀上是並行來處理新的任務的

可以直接在子程序的if(pid == 0)裡面幹想讓子程序幹的事情

直接寫到if裡面不夠靈活,因為我們只能把子程序的程式**貼上過來執行,這樣必須知道源**,太長了也不好控制,比如希望子程序執行ls -a,這樣是不行的,因為ls的源**沒有這樣ls放在子程序裡面就實現不了,

此時就是用exec族函式,可以直接把乙個編譯好的可執行程式,直接載入執行,

這樣的話父子程序,子程序需要執行的程式單獨編寫,單獨編譯鏈結,成乙個可執行程式hello,主程式為父程序,fork建立了子程序後,exec乙個hello,很類似乙個呼叫(我自己的理解),

exec族的六個函式

execl    l指列出來list和 execv 引數列表不一樣   v 直接給乙個陣列指標,本質上是多個字串

const char *arg[ ],這是乙個字串陣列,也就是常說的 char **理解這個很重要啊,本質上是多個字串

ps  看pid

kill -9 30713可以關掉制定的程序  這裡是訊號部分講解的

變參是以null結尾的,

ececlp  execvp  多加了p,起到的作用是,引數列表,file只有檔名沒有路徑,上面的ececl/execv必須要有全路徑名

而加了p的可以是file  也可以是path 只不過相容了file  只有名字,也就是加p的函式,會首先找file這個給定的檔案,如果找到直接執行,如果沒找則回去環境變數指定的目錄去找,如果找到則去執行,多幫著找了乙個位置

execle  execve多加了e 引數列表中,多加了envp形參,這個就是environment環境變數的意思,我們在執行這個path的時候

char *const envp[ ],呼叫這個程式的時候,區別,執行可執行程式時,會多傳遞乙個環境變數陣列進去,這個不一定是系統預設的環境變數,多的這個可以在程式中使用,這個並不是很常用,朱老師也沒用過

else if(pid == 0)//子程序

;//注意定義方法

execv("/bin/ls", argv);

} else

#if 0

pid = fork();

if(pid > 0)//父程序

else if(pid == 0)//子程序

else

#endif

exit(0);

}自己的可執行函式

#include int main(int argc, char *argv)//注意規範寫法

return 0;

}

#include#include #include #include #include #include #include int main(void)

else if(pid == 0)//子程序

Linux程序之exec族函式

fork函式建立新程序後,經常會在新程序中呼叫exec函式去執行另外乙個程式。當程序呼叫exec函式時,該程序被完全替換為新程式。因為呼叫exec函式並不建立新程序,所以前後程序的id並沒有改變。原創鏈結 include include include 函式原型 int execl const ch...

程序 exec函式族

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

Linux 程序 exec函式族

其他exec 函式 練習拓展dup2 dup to 函式 一 exec的簡介 1.fork建立程序後執行的是和父程序相同的程式 但有可能執行不同的 分支 子程序往往要呼叫一種exec函式執行另一種程式。當程序呼叫一種exec函式時,該程序的使用者空間 和資料完全被新程式替換,從新程式的啟動例程開始執...