了解σWAIT()及其如何设置参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (36)

sigwait()的手册页让我很困惑。sigwait的signature是:

 int sigwait(const sigset_t *set, int *sig);

假设我的代码类似于以下内容

 sigset_t wset;
 sigemptyset(&wset);
 sigaddset(&wset,SIGHUP);
 sigaddset(&wget,SIGINT);
 sigaddset(&wget,SIGTERM);
 int sig;
 sigwait(&wset,&sig);

如果我理解正确,这将等待发送信号。如果在信号集中找到信号(即sigset_t wset),它将设置信号编号(即int sig),如集合中所示(即本例中的SIGHUP,SIGINT,SIGTERM)。否则,它会将信号编号设置为0。我的理解是否正确?

我会试试这个,但我目前无法访问编译器。

好的,我发送一个信号:

 int res = sigwait(&wset,&sig);
 // res = 0, sig = SIGHUP, SIGINT, or SIGTERM

我发送的信号不包括在集合中:

int res = sigwait(&wset,&sig);
// res = EINVAL (i.e. non-zero) and don't worry about sig

它是否正确?

提问于
用户回答回答于

正如您所说,在你的示例sigwait中将等待其中一个SIGHUP,SIGINT,SIGTERM。

Otherwise, it will set the signal number to 0.

没有其他的。唯一定义的错误是

EINVAL The set argument contains an invalid or unsupported signal number.

要明确说明,此函数唯一定义的错误是set参数的无效输入。由于你在示例中构造的集合无效,因此该函数不会返回错误,它将等待其中一个信号到达。

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问9 回答
  • 富有想象力的人

    3 粉丝0 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 人生的旅途

    10 粉丝484 提问6 回答

扫码关注云+社区

领取腾讯云代金券