wait((int *)0)的含义

问题描述 投票:0回答:3

一个使用这样的等待函数的程序是:

#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; 
}   
c pipe fork
3个回答
15
投票

参见等一下(2)

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

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

此处,

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


1
投票

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


1
投票

参数

status_ptr
指向
wait()
可以存储状态值的位置。如果子进程显式返回零状态,则该状态值为零。如果不为零,则可以使用状态分析宏进行分析,如下面的“状态分析宏”中所述。

status_ptr
指针也可能是
NULL
,在这种情况下
wait()
会忽略子进程的返回状态。

https://www.ibm.com/docs/en/zos/2.1.0?topic=functions-wait-wait-child-process-end

© www.soinside.com 2019 - 2024. All rights reserved.