Chinaunix首页 | 论坛 | 博客
  • 博客访问: 430751
  • 博文数量: 61
  • 博客积分: 2286
  • 博客等级: 大尉
  • 技术积分: 550
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-27 22:04
文章分类

全部博文(61)

文章存档

2018年(2)

2017年(1)

2013年(2)

2012年(8)

2011年(6)

2010年(8)

2009年(13)

2008年(21)

我的朋友

分类: C/C++

2008-06-30 18:24:24

APUE课老师留了个作业,其中涉及到派生子进程,再调用execvp函数。这里主要写写,execvp这个函数的参数传递方式,以及fork的子函数和execvp执行后由一个全新的程序替换当前正文、数据、堆和栈段,对上述两点的一些使用心得。 首先说参数传递。之所以选择execvp这个函数是因为该函数可以传递变长参数,也就是说,虽然参数列表中只是两个指针变量,但由于第二个指针变量是变长指针数组,第二个参数传入参数个数实际是该数组的长度,可以通过控制指针数组的长度来控制传入的参数数量。控制变长指针数组的方法是指定变长指针数组中第一个为NULL的位置,也就是说在将你所传入的参数指针的下一个位置置NULL。这里要说说,我在第一次使用时,以为只要变长数组指针所指向的空间均为'\0',即可控制传入的参数,后来发现会出现未知参数,用gdb调试时,发现指向的全'\0'空间也被传递给了execvp函数,导致了函数调用的失败。从本质上来讲,这里是由于对变长指针数组控制方式的不明确造成的。后来将指针数组的参数传递位的下一个指针值置空即满足了条件。 再说对于对原函数的正文、数据、堆和栈段的替换问题的理解。(未完待续)
阅读(5577) | 评论(0) | 转发(0) |
0

上一篇:计算机常用端口

下一篇:Internet协议编号

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