在进程创建中等待()

时间:2015-08-20 14:16:33

标签: c++ gcc wait

以下是我的代码:

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

 using namespace std;

 int main() {
         int cpid=fork();

         if(cpid==0) {
                printf("%d %d\n",getpid(),getppid());  
         }
         else {
                printf("hello");
                wait(NULL);
         }
 }

当我使用以下代码编译它时:

g++ -std=c++11 multiple.cpp -o multiple
It gives me the following

multiple.cpp: In function 'int main()':
multiple.cpp:34:23: error: no matching function for call to 'wait::wait(NULL)'
              wait(NULL);
                       ^
multiple.cpp:34:23: note: candidates are:
In file included from /usr/include/stdlib.h:42:0,
                 from multiple.cpp:4:
/usr/include/bits/waitstatus.h:66:7: note: wait::wait()
 union wait

/usr/include/bits/waitstatus.h:66:7: note:   candidate expects 0 arguments, 1 provided
/usr/include/bits/waitstatus.h:66:7: note: constexpr wait::wait(const wait&)
/usr/include/bits/waitstatus.h:66:7: note:   no known conversion for argument 1 from 'int' to 'const wait&'
/usr/include/bits/waitstatus.h:66:7: note: constexpr wait::wait(wait&&)
/usr/include/bits/waitstatus.h:66:7: note:   no known conversion for argument 1 from 'int' to 'wait&&'

但如果我将扩展程序更改为.c并使用gcc -o multiple multiple.c则可行。为什么会这样?

3 个答案:

答案 0 :(得分:3)

您没有包含wait()文档告诉您需要的正确头文件。

你需要

#include <sys/wait.h>

答案 1 :(得分:3)

因为在sys / wait.h中声明了wait,你没有包含它,并且C ++要求所有函数在使用之前都是原型。另一方面,C则没有。

答案 2 :(得分:2)

根据the documentation,您没有包含POSIX wait函数的标头:

#include <sys/wait.h>

令人惊讶但不可思议的是,C工具链中的等效标准库标题恰好包含了这一点,而您使用的C ++标题库则没有。

更有可能的是,你无意中利用了C中的可怕规则,即你可以在声明之前使用某些函数。