【问题标题】:why the wait() function takes more argument?为什么 wait() 函数需要更多参数?
【发布时间】:2023-03-27 07:45:02
【问题描述】:

我尝试使用 waitpid() 函数,它需要三个参数,而我在下面实现了一个 代码,我有一些错误,而不是 waitpid() 函数,我使用了 wait() 函数 与三个论点。它工作正常我不知道它是如何工作的。 谁能解释一下??

 #include<stdio.h>
  #include<stdlib.h>
 #include<unistd.h>

main()
 {
    pid_t pid;
    int p;

    if((pid=fork())==0){
            printf("Child present\n");
            sleep(2);
            printf("Child terminated\n");
            _exit(0);
    }
    wait(pid,&p,0);                                                                                         
    printf("parent terminated\n");
    return 0;
 }

但是等待函数的语法是

 pid_t wait(int *status);

【问题讨论】:

  • 您的代码有错误。修复错误,谜团就会消失。

标签: c fork waitpid


【解决方案1】:

根据手册页here,您需要包含&lt;sys/types.h&gt;&lt;sys/wait.h&gt; 头文件才能使用我在您的代码中没有看到的wait() [或waitpid()]。

很有可能您的编译器使用了 implicit declarationwait() 函数,以防万一,

  • 接受任意数量的输入参数
  • 返回一个整数。

如果你包含上述头文件并编译,你的编译器应该会产生关于

的警告

函数“等待”的参数太多

【讨论】:

  • 在您发布答案后,我包含了该头文件并运行该代码,当时还没有显示任何错误或警告消息
  • @SouravGhosh - 没有理由认为省略wait() 的原型(不包括&lt;sys\types.h&gt;)将导致代码performs nothing。链接器将寻找wait() 函数,并且推测Bhuvanesh 已设法包含正确的库文件以便找到函数。但是省略原型确实允许使用完全错误的参数和返回类型调用函数。
  • @AAT 对,先生,删除了那部分。非常感谢你让我正确。
  • @AAT 只是出于好奇,是否决投票的原因还是我可以添加其他内容来改进它。
  • @SouravGhosh - 我不是反对者。事实上,自从你改进了答案后,我现在已经支持你了。
猜你喜欢
  • 2011-02-25
  • 2016-07-27
  • 2019-03-11
  • 1970-01-01
  • 2012-09-15
  • 2014-06-04
  • 2018-02-15
相关资源
最近更新 更多