为什么 wait() 函数需要更多参数?

Bhu*_*esh 4 c fork waitpid

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

 #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;
 }
Run Code Online (Sandbox Code Playgroud)

但等待函数的语法是

 pid_t wait(int *status);
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

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

您的编译器很可能使用了某些implicit declaration函数wait(),以防万一,

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

如果您包含上述头文件并编译,您的编译器应该产生有关以下内容的警告

函数“wait”的参数太多

  • @SouravGhosh - 没有理由认为省略“wait()”的原型(通过不包括“&lt;sys\types.h&gt;”)将导致代码“不执行任何操作”。链接器将寻找“wait()”函数,并且可能 Bhuvanesh 已设法包含正确的库文件,以便找到函数。但是,省略原型确实会导致使用完全错误的参数和返回类型来调用函数,正如您所说的那样。 (4认同)