exec 與system 的區別

2021-06-28 07:12:38 字數 1063 閱讀 4374

這應該算是老生長談的問題了,在此做乙個記錄。

執行exec()後,老的程序上下文將被exec出來的新的程序上下文覆蓋,新程序代替原程序執行。

執行system()後則相當於fork()出乙個子程序,並等待此子程序執行完畢。

請看如下程式以加深理解。

[cpp]view plain

copy

/* rt.c */

intmain()    

#gcc rt.c -o rt

[cpp]view plain

copy

/* test.c */

#include 

#include 

#include 

#include 

#include 

intmain()  

;  char

*envp = ;  

intret_stat = 0;  

intpid = fork();  

if(pid == 0)   

else

if(pid > 0 )   

else

}  else

if(pid < 0)   

return

0;  

}  

巨集wifexited用於判斷程序是否正常退出。

巨集wexitstatus用於得到程序的退出狀態碼。

分別使用execve()和system()函式來測試程序的返回值。

問:在列出的3種情況下,程序的返回值分別是什麼?

1.使用execve("./rt", argv, envp);

返回值為100,execve()後的exit(127)永遠都不會走到。

2.使用

execve("./rtabc", argv, envp);

rtabc是乙個並不存在的程式。

此時execve()函式將會執行失敗。

最後程序返回127。

3.使用system("./rt");

程序返回127。

exec 與system 的區別

這應該算是老生長談的問題了,在此做乙個記錄。執行exec 後,老的程序上下文將被exec出來的新的程序上下文覆蓋,新程序代替原程序執行。執行system 後則相當於fork 出乙個子程序,並等待此子程序執行完畢。請看如下程式以加深理解。rt.c int main gcc rt.c o rt test...

exec 與system 的區別

這應該算是老生長談的問題了,在此做乙個記錄。執行exec 後,老的程序上下文將被exec出來的新的程序上下文覆蓋,新程序代替原程序執行。執行system 後則相當於fork 出乙個子程序,並等待此子程序執行完畢。請看如下程式以加深理解。cpp view plain copy print?rt.c i...

system函式 與 exec函式的區別

exec家族一共有六個函式,分別是 1 int execl const char path,const char arg,2 int execle const char path,const char arg,char const envp 3 int execv const char path,c...