现在的位置: 首页 > 综合 > 正文

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

2013年11月21日 ⁄ 综合 ⁄ 共 1761字 ⁄ 字号 评论关闭

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);都可以。

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

 

抱歉!评论已关闭.