- 论坛徽章:
- 0
|
本文主要参考《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; iargc; i++)
9 printf("argv[%d]:%s\n",i,argv);
10 exit(0);
11 }
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66435/showart_1358710.html |
|