在父程序中fork乙個子程序,在子程序中呼叫exec函式啟動新的程式。exec函式一共有六個,其中execve為核心級系統呼叫,其他(execl,execle,execlp,execv,execvp)都是呼叫execve的庫函式。
#include
函式定義int execve(const char *filename, char *const ar**[ ], char *const envp[ ]);
返回值函式執行成功時沒有返回值,執行失敗時的返回值為-1.
函式說明execve()用來執行引數filename字串所代表的檔案路徑,第二個引數是利用陣列指標來傳遞給執行檔案,並且需要以空指標(null)結束,最後乙個引數則為傳遞給執行檔案的新環境變數陣列。
#includemain()
;
char *envp[ ]=
execve("/bin/ls", ar**, envp);
}
執行結果為:-rw-r--r-- 1 root root 1659 feb 27 20:13 /etc/passwd
這與在bin目錄下執行 ls -al /etc/passwd 所得到的結果是一樣的。
linux fork()和execve()的區別
fork是分身,execve是變身。
exec系列的系統呼叫是把當前程式替換成要執行的程式,而fork用來產生乙個和當前程序一樣的程序(雖然通常執行不同的**流)。通常執行另乙個程式,而同時保留原程式執行的方法是,fork+exec。
看看手冊裡面的例子就知道怎麼用了。
exec系列的系統呼叫已經是變成別的程式了,已經和本程式無關了
Linux 執行新程式 execve 函式
在linux程式中,通過呼叫execve 程序能夠以全新程式來替換當前執行的程式。再次過程中,將丟棄舊有程式,程序的棧.資料以及堆段會被新程式所替換。這個 exec 函式族就提供了乙個在程序中啟動另乙個程式執行的方法。它根據指定的檔名或目錄名找到可執行檔案,並用它來代替當前程序的執行映像。也就是說,...
execve的使用方法
execve 引數1,引數2,引數3 引數1 命令所在路徑 引數2 命令的集合 引數3 傳遞給執行檔案的環境變數集 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改...
execve的使用說明
execve函式作用是執行乙個新的程式,程式可以是二進位制的可執行程式,也可以是shell pathon指令碼 標頭檔案上是unistd.h 函式原型 int execve const char filename,char const ar char const envp 引數介紹 filename...