linu應用邊角料5 exec族函式

2021-10-20 00:07:04 字數 1984 閱讀 1588

1、為什麼需要exec函式

(1)fork子程序是為了執行新程式(fork建立了子程序後,子程序和父程序同時被os排程執行,因此子程序可以單獨的執行乙個程式,這個程式巨集觀上將會和父程序程式同時進行)

(2)可以直接在子程序的if中寫入新程式的**。這樣可以,但是不夠靈活,因為我們只能把子程序程式的源**貼過來執行(必須知道源**,而且源**太長了也不好控制),譬如說我們希望子程序來執行ls -la 命令就不行了(沒有源**,只有編譯好的可執行程式)

(3)使用exec族執行新的可執行程式(exec族函式可以直接把乙個編譯好的可執行程式直接載入執行)

(4)我們有了exec族函式後,我們典型的父子程序程式是這樣的:子程序需要執行的程式被單獨編寫、單獨編譯連線成乙個可執行程式(叫hello),(專案是乙個多程序專案)主程式為父程序,fork建立了子程序後在子程序中exec來執行hello,達到父子程序分別做不同程式同時執行的效果。

2、exec族的6個函式介紹

建立乙個子程序,在子程序中編寫如下**:

// 子程序

//execl("/bin/ls", "ls", "-l", "-a", null); // ls -l -a

//char * const arg = ;

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

//execl("hello", "aaa", "bbb", null);

//char * const arg = ;

//execv("hello", arg);

//execlp("ls", "ls", "-l", "-a", null);

char

*const envp=

;execle

("hello"

,"hello"

,"-l"

,"-a"

,null

, envp)

;

(1)execl和execv 這兩個函式是最基本的exec,都可以用來執行乙個程式,區別是傳參的格式不同。execl是把引數列表(本質上是多個字串,必須以null結尾)依次排列而成(l其實就是list的縮寫),execv是把引數列表事先放入乙個字串陣列中,再把這個字串陣列傳給execv函式。

(2)execlp和execvp 這兩個函式在上面2個基礎上加了p,較上面2個來說,區別是:上面2個執行程式時必須指定可執行程式的全路徑(如果exec沒有找到path這個檔案則直接報錯),而加了p的傳遞的可以是file(也可以是path,只不過相容了file。加了p的這兩個函式會首先去找file,如果找到則執行執行,如果沒找到則會去環境變數path所指定的目錄下去找,如果找到則執行如果沒找到則報錯)

(3)execle和execvpe 這兩個函式較基本exec來說加了e,函式的引數列表中也多了乙個字串陣列envp形參,e就是environment環境變數的意思,和基本版本的exec的區別就是:執行可執行程式時會多傳乙個環境變數的字串陣列給待執行的程式。

3、execlp和execvp

(1)加p和不加p的區別是:不加p時需要全部路徑+檔名,如果找不到就報錯了。加了p之後會多幫我們到path所指定的路徑下去找一下。

4、execle和execvpe

(1)main函式的原型其實不止是int main(int argc, char **ar**),而可以是int main(int argc, char **ar**, char **env)第三個引數是乙個字串陣列,內容是環境變數。

(2)如果使用者在執行這個程式時沒有傳遞第三個引數,則程式會自動從父程序繼承乙份環境變數(預設的,最早**於os中的環境變數);如果我們exec的時候使用execlp或者execvpe去給傳乙個envp陣列,則程式中的實際環境變數是我們傳遞的這乙份(取代了預設的從父程序繼承來的那乙份)

機器學習 邊角料

so phis tica teda lgor ithm sim plel earn inga lgor ithm goo dtra inin gdat a.z 11 exp z 注意一點,在神經網路引入sigmoid型函式的目的是避免,對權重乙個微小的改變可能對輸出帶來的顯著的改變,這一情況的發生 ...

MySQL的邊角料

1查詢對應資料庫所有的表 select from information schema.tables where table schema 資料庫名 2 查詢資料庫所有資料表的字段 select from information schema.columns where table schema 資...

linu應用邊角料4 linux環境變數在函式中

1 export命令檢視環境變數 2 程序環境表介紹.每乙個程序中都有乙份所有環境變數構成的乙個 也就是說我們當前程序中可以直接使用這些環境變數。程序環境表其實是乙個字串陣列,用environ變數指向它。宣告就能用,不用定義。include intmain void 3 程式中通過environ全域...