sigwait()的手册页让我很困惑。sigwait的签名是
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
这是正确的吗?
https://stackoverflow.com/questions/51640723
复制相似问题