【问题标题】:Meaning of wait((int *)0)wait((int *)0) 的含义
【发布时间】:2010-10-15 22:58:04
【问题描述】:

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

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

【问题讨论】:

  • 如果只有示例代码与线程有关。
  • @Sean -- 你错过了 fork() 调用吗?
  • 不。我看到了。仍然与线程无关。
  • @Sean -- 我明白了。对问题的编辑删除了文本中的线程引用。我以为你在推断没有什么可以等待的。当然,这是一个正在等待的进程而不是线程。
  • @tvanfosson:是的,我最初评论时“线程”仍在标题/正文中。

标签: c pipe fork


【解决方案1】:

man wait(2)

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-21
      • 2017-03-21
      • 2019-05-02
      • 2023-04-06
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      相关资源
      最近更新 更多