(一)fork函式建立子程序後,子程序往往要呼叫一種exec函式以執行了另乙個程式。當程式呼叫一種exec函式時,該程序執行的程式完全替換為新程式,而新程式則從其main函式開始執行。因為exec並不建立新程序,所以前後的程序id並未改變,只是用乙個全新的程式替換了當前程式的正文、資料、堆和棧段。
#includeint execl (const char *pathname,const char *arg0,.../*(char *)0*/);//以乙個空指標結尾
int execv (const char *pathname,const char *const arg);
int execle(const char *pathname,const char *arg0,...,/*(char *)0,char *const envp*/);
int execve(const char *pathname,const char *arg,char *const envp)//與main函式中的ar**,envp對應
int execlp(const char *filename,const char *arg0,.../*(char *)0*/)
int execvp(const char *filename,onst char *const arg)
6個函式返回值:若出錯則返回-1,若成功則不返回值
字母p:表示該函式取filename作為引數,並且用path環境變數尋找可執行檔案。
字母l:表示函式取乙個參數列,與字母v互斥。v表示該函式取乙個ar**[ ]向量。
字母e:表示該函式取envp[ ]陣列,而不使用當前環境。
這些函式區別:
(1)前4個取路徑名作為引數,後2個取檔名作為引數。當filename作為引數時:
如果filename中包含/,則將其視為路徑名。否則就按path環境變數,在它指定的各目錄中搜尋可執行檔案。
path變數包含了一張目錄表(路徑字首),目錄之間用冒號(:)分隔。例如:name = val環境字串
path = /bin:/usr/bin:/usr/local/bin/:. 指定在4個目錄中進行搜尋。最後的路徑表示在當前目錄。
(2)引數(l表示list,v表示向量vector)
函式ececl,execle,execlp要求將新程式的每個命令列引數都說明為乙個單獨的引數,這種引數一空指標為結尾。另外三個函式,則應先構造乙個指向各個引數的指標陣列,然後將該陣列的位址作為這三個函式的引數。
(3)環境變數(envp)
以e結尾的兩個函式(execle和execve)可以傳遞乙個指向環境字串指標陣列的指標。其他四個函式則呼叫程序中的environ變數為新程序複製現有環境。
(二)exec函式之間的關係
2 4 程序管理 4
程序通訊 程序間相互傳遞資訊的過程 低階通訊 效率低,通訊對使用者不透明。高階通訊 適用於大批量資料傳達 不是為了控制速度,為了在程序間傳輸大批量資料 訊息通訊機制 程序間的資料交換以格式化的資訊為單位,在計算機網路中,又把這種訊息叫做報文。利用一組通訊原語,實現大量資料的傳遞,通訊對使用者透明。實...
程序等待和程序替換
程序退出場景 執行完畢,結果正確退出 執行完畢,結果錯誤退出 異常終止 程序退出 1.正常退出 從main中return中退出 呼叫void exit int status 和 void exit int status exit在任意位置呼叫都可以終止程式。兩者區別 殭屍程序的產生是因為子程序先行退...
linux管理和程序(4)
selinux 由美國 局開發的,security enhanced linux的縮寫。傳統的檔案許可權與賬號關係 自主訪問控制 dac,就是一句程序的所有者與檔案資源的rwx許可權來決定有無訪問能力 這種dac的缺點 root具有最高許可權,可以在系統上進行任何資源的訪問 使用者可取得程序來更改檔...