7

一个使用这样的等待功能的程序是这样的:

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    int pid,fd[2]; int n; char line[20];        
    if(pipe(fd)<0) { 
        printf("Error creating pipe"); 
    } else { 
        pid=fork(); 
        if(pid<0) { 
            printf("Error while forking"); 
        } else { 
            if(pid>0) { 
                close(fd[0]); 
                write(fd[1],"Hello\n",6); 
                while(wait((int *)0)!=pid);
            } else { 
                close(fd[1]); 
                n=read(fd[0],line,20); 
                if(n<0) 
                printf("Error reading a file"); 
                write(1,line,n); 
            } 
        } 
    } 
    return 0; 
}   
4

2 回答 2

13

man wait(2)

wait((int *)0)来电waitpid(-1, (int *)0, 0)。手册页指出:

如果 status 不为 NULL,wait() 和 waitpid() 将状态信息存储在它指向的 int 中。

这里,status是 NULL (0)。因此,您的调用wait等待任何子进程中的状态更改,并且不返回状态。pid该调用仅检查特定子进程(在您的情况下)是否发生状态更改。

于 2009-03-27T14:38:51.087 回答
1

stager的答案是正确的。尽管应该注意强制转换是完全没有必要的,因为根据标准,指针上下文中使用的 0 是 NULL 指针。

于 2009-03-27T14:44:58.500 回答