【问题标题】:Cannot compile with waitid() and P_PID无法使用 waitid() 和 P_PID 进行编译
【发布时间】:2014-12-10 10:09:21
【问题描述】:

我是 Linux 新手。我正在尝试使用 waitid() 来等待子进程。 当我尝试使用 gcc 编译包含以下行的文件时:

id_t cpid = fork();
siginfo_t status;
waitid(P_PID, cpid, &status, WEXITED);

产生了以下错误:

error: ‘P_PID’ undeclared (first use in this function)

我包含了以下库:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <string.h> 
#include <time.h> 

我错过了什么吗?

另一个问题是如何使用WIFSIGNALED() 来检索类型siginfo_t 的信息?

【问题讨论】:

  • 你可能想阅读waitid reference,你没有包含正确的头文件。
  • 根据waitid()的manual page,waitid()的第一个参数应该是P_PID或者P_ALL或者P_GID,还是我误解了waitid()的用法?
  • @user3545752: #include &lt;sys/wait.h&gt;

标签: c waitpid


【解决方案1】:

您需要包含&lt;sys/wait.h&gt; 并定义_XOPEN_SOURCEas documented in the manual

WIFSIGNALED 宏必须与从waitwaitpidwaitid 获得的整数状态一起使用。对于waitpid,状态作为siginfo_t 结构的si_status 成员可用。换句话说,您将使用 WIFSIGNALED(info.si_status)info 作为 siginfo_t 类型的结构,其地址之前传递给 waitid()

【讨论】:

  • 谢谢!我没有意识到我没有包含
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多