linux中execve函數的用法


在父進程中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)結束,最后一個參數則為傳遞給執行文件的新環境變量數組。

 

  1. #include<unistd.h>   
  2. main()   
  3. {   
  4.   char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};   
  5.   char *envp[ ]={"PATH=/bin", NULL}   
  6.   execve("/bin/ls", argv, envp);   
  7. }  

運行結果為:-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系列的系統調用已經是變成別的程序了,已經和本程序無關了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM