system函数 与 exec函数的区别
生活随笔
收集整理的這篇文章主要介紹了
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, 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) { printf(“fork error!”); exit(-1); } else if (pid == 0) { //這里是子進程 printf("I'm son! "); //執行其它的程序 exec("your_program"); } else { //這里是父進程 printf("i'm father!"); wait();//等待子進程結束后返回 exit(0); }總結
以上是生活随笔為你收集整理的system函数 与 exec函数的区别的全部內容,希望文章能夠幫你解決所遇到的問題。