linux中execve函數的用法

原文鏈接:https://www.cnblogs.com/jxhd1/p/6706701.html

在父進程中fork一個子進程,在子進程中調用exec函數啓動新的程序。exec函數一共有六個,其中execve爲內核級系統調用,其他(execl,execle,execlp,execv,execvp)都是調用execve的庫函數。

#include<unistd.h>

函數定義 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);

返回值 函數執行成功時沒有返回值,執行失敗時的返回值爲-1.

函數說明 execve()用來執行參數filename字符串所代表的文件路徑,第二個參數是利用數組指針來傳遞給執行文件,並且需要以空指針(NULL)結束,最後一個參數則爲傳遞給執行文件的新環境變量數組。

#include<unistd.h>   

main()   

{   

  char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};   

  char *envp[ ]={"PATH=/bin", NULL}   

  execve("/bin/ls", argv, 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系列的系統調用已經是變成別的程序了,已經和本程序無關了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章