Linux wait 函数实参为指针时,没有预期结果,原因及其解决办法

28 篇文章 0 订阅

Linux/Unix wait 一般用在,用户主程序调用 fork 产生一个新的进程后,等待子进程执行完毕。在标准的 Unix wait 的头文件定义为:

#include <sys/wait.h>

pid_t wait(int *statloc);

Linux 中,定义为:

/*come from /usr/include/sys/wait.h

  Wait for a child to die. When one does, put its status in *STAT_LOC ....

*/

extert  __pid_t  wait  (__WAIT_STATUS  __stat_loc);

也就是wait 的参数类型为 int  的指针类型。

以下为一段程序。

Ubuntu10.4  下的结果如下:

main pid is 1754,my ppid is 1265

child pid is 1755,my ppid is 1754

I will wait

no proecss waited

Wait返回的PID值为-1,也就是父进程,没有等待到子进程的结束。

 

把@1出的变量s1修改为:int s1。并在@2和@3中作相应的改动。

程序如下:


同样在 Ubuntu10.4  下的结果如下:

main pid is 1774,my ppid is 1265

child pid is 1775,my ppid is 1774

I will wait

my pid is 1774,waited pid is 1775,s1= 0

 

这里父进程ID为1774,子进程ID为1775,并准确等待到了子进程的结束。

原因:

如果一个函数的参数为指针,比如int f(int *p),则p的实参可以定义为,int * p 或者是 int p;

如果是前者在调用时用f(p),如果是后者在调用时,利用f(&p);都可以。

在这里为什么不一样,大家说一说?

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值