exce函式組
(1)exec函式族說明
fork()函式用於建立乙個子程序,該子程序幾乎複製了父程序的全部內容;exec函式族可以用來在乙個程序中啟動另乙個可執行檔案,該可執行檔案將代替當前程序的執行映像(包括原呼叫程序的資料段、**段和堆疊段)。該呼叫並沒有生成新的程序,而是在原有程序的基礎上,替換原有程序的正文,呼叫前後是同乙個程序,除了程序號pid不變,其他全部被新的程序替換了。這裡的可執行檔案既可以是二進位制檔案,也可以是linux下的任何可執行的指令碼檔案。
(2)exec函式族語法
所需標頭檔案:
#include
六種呼叫形式:
int execl(const char *path, const char *arg, ...)
int execv(const char *path, char *const ar**)
int execle(const char *path, const char *arg, ..., char *const envp)
int execve(const char *path, char *const ar**, char *const envp)
int execlp(const char *file, const char *arg, ...)
int execvp(const char *file, char *const ar**)
函式返回值:
-1:出錯
exec函式名對應位含義:
前4位:均為exec
第5位:l:引數傳遞為逐個列舉的方式,其語法為const char *arg
v:引數傳遞為構造指標陣列的方式,其語法為char *const ar**
第6位:e:可傳遞新程序環境變數
p:執行檔案查詢可以只給出檔名,系統就會自動按照環境變數"$path"所指定的路徑進行查詢
(3)exec函式族應用舉例
以下程式實現子程序執行可執行檔案,父程序顯示執行結果。
上**
#include#include #include #include int main(int argc,char *ar**);
char **list;//不知道陣列大小,動態分配大小
list=(char **)malloc((argc+1)*sizeof(char *));
//list[0]="./t2";
for(index=0;index
fork()
fork()之前,只有乙個程序在執行這段**,但在這條語句之後,就變成兩個程序在執行了,這兩個程序的幾乎完全相同,
將要執行的下一條語句都是if(fpid<0)……
為什麼兩個程序的fpid
不同呢,這與
fork
函式的特性有關。
fork呼叫的乙個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:
1)在父程序中,
fork
返回新建立子程序的程序id;
2)在子程序中,
fork返回0
;3)如果出現錯誤,
fork
返回乙個負值;
在fork
函式執行完畢後,如果建立新程序成功,則出現兩個程序,乙個是子程序,乙個是父程序。在子程序中,
fork
函式返回
0,在父程序中,
fork返回新建立子程序的程序
id。我們可以通過
fork
返回的值來判斷當前程序是子程序還是父程序。
引用一位網友的話來解釋fpid
的值為什麼在父子程序中不同。
「其實就相當於鍊錶,程序形成了鍊錶,父程序的
fpid(p
意味point)
指向子程序的程序
id,
因為子程序沒有子程序,所以其fpid為0.
fork出錯可能有兩種原因:
1)當前的程序數已經達到了系統規定的上限,這時
errno
的值被設定為
eagain
。2)系統記憶體不足,這時
errno
的值被設定為
enomem。
建立新程序成功後,系統**現兩個基本完全相同的程序,這兩個程序執行沒有固定的先後順序,哪個程序先執行要看系統的程序排程策略。
每個程序都有乙個獨特(互不相同)的程序識別符號(process id
),可以通過
getpid
()函式獲得,還有乙個記錄父程序
pid的變數,可以通過
getppid
()函式獲得變數的值。
#include #include #include #include int main(int argc,char *ar**)
else
printf("%d pid exit\n",getpid());
return 0;
}
fork 函式 fork 函式的使用
fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。include includeint main printf c b fflush stdout fork printf c c fflush stdout 上圖的輸出是什麼呢?答案是 bab...
c 中的fork函式 FORK()函式
乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。然後把原來的程序的所有...
fork函式 exec函式
fork 會產生乙個和父程序完全相同的子程序,出於效率考慮,linux中引入了 寫時複製 技術,也就是只有程序空間的各段的內容要發生變化時,才會將父程序的內容複製乙份給子程序。在fork之後exec之前兩個程序用的是相同的物理空間 記憶體區 子程序的 段 資料段 堆疊都是指向父程序的物理空間,也就是...