wait((int *)0) 的含义

发布于 2024-07-16 11:08:21 字数 753 浏览 4 评论 0原文

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

#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; 
}   

One such program that uses a wait function like this is this one:

#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; 
}   

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初雪 2024-07-23 11:08:21

请参阅man wait(2)

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

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

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

See man wait(2).

wait((int *)0) calls waitpid(-1, (int *)0, 0). The man page states:

If status is not NULL, wait() and waitpid() store status information in the int to which it points.

Here, status is NULL (0). Thus, your call to wait waits for a state change in any child process, and does not return a status. The call merely checks to see if a state change occurred for a specific child process (pid in your case).

酷炫老祖宗 2024-07-23 11:08:21

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

stager's answer is correct. Though it should be noted that the cast is entirely unnecessary since according to the standard, 0 used in a pointer context is the NULL pointer.

︶ ̄淡然 2024-07-23 11:08:21

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

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

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

The argument status_ptr points to a location where wait() can store a status value. This status value is zero if the child process explicitly returns zero status. If it is not zero, it can be analyzed with the status analysis macros, described in “Status Analysis Macros,” below.

The status_ptr pointer may also be NULL, in which case wait() ignores the child's return status.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文