本文主要参考《unix环境高级编程》
一个创建子进程后,子进程都会调用exec函数执行另一个程序。
exec只是用一个全新的程序代替当前进程的正文,数据,堆和栈段。
一共有6种exec函数,关系可以用下图表示:
字母p表示该函数取filename作为参数,并且用PATH环境变量寻找可执行文件。字母l表示该函数取一个参数表,他与字母v互斥。v表示该函数取一个argv【】矢量。字母e表示该函数取envp【】数组,而不使用当前环境。
下面是调用execle的例子,简化版。
exec函数文件exec.c
#include "apue.h" 2 3 char *env_init[] = {"USER=unknow",NULL}; 4 5 int main(void) 6 { 7 pid_t pid; 8 9 if ((pid=fork()) < 0) 10 err_sys("fork error"); 11 else if (pid == 0) { 12 if (execle("/home/eelb/apue.2e/myproject/eight/echo","echo","a1","a2",(char *)0,env_init) < 0) 13 err_sys("exec error"); 14 } 15 exit(0); 16 }
|
下面是exec执行的代码echo.c,为了上面的代码运行,echo.c代码要编译成可执行文件命名为echo。
#include "apue.h" 2 3 int main(int argc, char *argv[]) 4 { 5 int i; 6 char **ptr; 7 extern char **environ; 8 for (i=0; i<argc; i++) 9 printf("argv[%d]:%s\n",i,argv[i]); 10 exit(0); 11 }
|
阅读(868) | 评论(0) | 转发(0) |