這應該算是老生長談的問題了,在此做乙個記錄。
執行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...