exec 與system 的區別

2021-06-29 08:05:17 字數 1454 閱讀 3229

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

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

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

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

[cpp]view plain

copy

print?

/* rt.c */

int main()    

/* rt.c */  

int main()

#gcc rt.c -o rt

[cpp]view plain

copy

print?

/* test.c */

#include 

#include 

#include 

#include 

#include 

int main()  

;  char *envp = ;  

int ret_stat = 0;  

int pid = fork();  

if (pid == 0)   

else

if (pid > 0 )   

else   

}  else

if (pid < 0)   

return 0;  

}  

/* test.c */

#include #include #include #include #include int main()

; char *envp = ;

int ret_stat = 0;

int pid = 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 rt.c intmain...

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...