system函式 與 exec函式的區別

2021-07-23 22:07:38 字數 1290 閱讀 5144

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, char *const argv);

(4)int execve(const char *filename, char *const argv, char *const envp);

(5)int execvp(const char *file, char * const argv);

(6)int execlp(const char *file, const char *arg, ......);

其中只有execve是真正意義上的系統呼叫,其它都是在此基礎上經過包裝的庫函式。

system是用shell來呼叫程式=fork+exec+waitpid,而exec是直接讓你的程式代替用來的程式執行。

system 是在單獨的程序中執行命令,完了還會回到你的程式中。而exec函式是直接在你的程序中執行新的程式,新的程式會把你的程式覆蓋,除非呼叫出錯,否則你再也回不到exec後面的**,就是說你的程式就變成了exec呼叫的那個程式了。

看一下,下面的例子.

例子1---------------------------------

system("your_program");

printf("you can see me! ");

---------------------------------

例子2---------------------------------

exec("your_program");

printf("you can't see me! ");

---------------------------------

在例子1中,在你的程式執行完畢以後,會執行printf語句。

在例子2中,由於exec將程式your_program代替了本身,因此程式不再會執行printf語句。

在linux下,exec通常會和fork語句一起用。

看下面的這個例子

--------------------------------------------

pid_t pid = fork();

if (pid < 0) else if (pid == 0) else

linux中system和exec函式的區別

system 是用shell來呼叫程式 fork exec waitpid,而exec是直接讓你的程式代替用來的程式執行。system 是在單獨的程序中執行命令,完了還會回到你的程式中。而exec函式是直接在你的程序中執行新的程式,新的程式會把你的程式覆蓋,除非呼叫出錯,否則你再也回不到exec後面...

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