Chinaunix首页 | 论坛 | 博客
  • 博客访问: 857383
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: LINUX

2008-11-03 21:16:15

本文主要参考《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) |
0

上一篇:竞争条件

下一篇:写时复制(copy-on-write)

给主人留下些什么吧!~~