給程序指定一個新的執行程式的函式exec()
阿新 • • 發佈:2019-02-14
一個程序呼叫exec()函式來執行一個新程式。之後該程序的程式碼段、資料段和堆疊段就被新程式的所代替。新程式從自己的main()函式開始執行。
一個
簡單的exec()呼叫的例子
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> char *env_list[] = {"USER = kate","PATH = /tmp",NULL}; int main() { pid_t pid; pid = fork(); if(pid < 0) { printf("fork error\n"); exit(0); } else if(pid == 0) { if(execle("/home/acer/workspace/print1","print1","arg1","arg2",(char *)0,env_list) < 0) printf("execle error\n"); exit(0); } if(waitpid(pid,NULL,0) < 0){ printf("WAIT ERROR\n"); exit(0); } if((pid = fork()) < 0) { printf("fork error\n"); exit(0); } else if(pid == 0) { if(execlp("/home/acer/workspace/print1","print1","arg1",(char*)0) < 0) printf("execle error\n"); exit(0); } exit(0); return 0; }
子程序的可執行檔案print1的原始碼為:
#include <stdio.h>
inr main(int argc,char *argv[])
{
int n;
char * * ptr;
extern char * * environ;
for(n = 0; n < argc; n++)
printf("arg[%d]:%s\n",n,argv[n]);
for(ptr = environ; *ptr != 0; ptr++)
printf("%s\n",*ptr);
exit(0);
}
分析:print1.c是主程式file4.c中exec函式指派的可執行程式的原始檔名,將傳遞給程式的引數和環境變數進行輸出。下面是一種可能的結果
程式首先呼叫了execlp(),傳遞的引數有可執行程式的路徑名、程式所需的引數及程式執行時的環境變數。