在第10章APUE的信号中。
我对sigprocmask()
,SIG_BLOCK
和SIG_SETMASK
有一些疑问。
我们声明类型为newmask
的{{1}},然后sigset_t
表示初始化新掩码,以便排除sigempty(&newmask)
指向的所有信号,最后添加{{1}到newmask
集。
但我不确定以下是什么意思。 SIGQUIT
和newmask
指向SIG_BLOCK
的信号是newmask
吗?
sigprocmask()
oldmask
旧面具。 sigprocmask(SIG_BLOCK, &newmask, &oldmask)
是SIG_SETMASK
,其中包含oldmask
,如何取消阻止信号(sigset_t
)?
SIGQUIT
以下是整个代码:
SIGQUIT
非常感谢!
答案 0 :(得分:1)
我们声明一个类型为sigset_t的新掩码,然后sigempty(& newmask)意味着初始化newmask,以便排除newmask指向的所有信号,最后将SIGQUIT添加到新的掩码集。
不完全是。 sigemptyset()
将所有来自newmask
的信号排除在外(即它是空信号集)。
但我不确定以下是什么意思。是不是将新掩码和sigprocmask()指向的信号SIG_BLOCK到旧掩码?
sigprocmask(SIG_BLOCK, &newmask, &oldmask)
使用newmask
设置新信号掩码(即如果成功,则只阻止SIGQUIT
)并返回{{1}中的旧信号掩码}}
oldmask是一个包含SIGQUIT的sigset_t,如何解锁信号(SIGQUIT)?
那不是真的。 旧信号掩码是 oldmask
被阻止之前的,当您阻止SIGQUIT
并存储时,sigprocmask()
会返回 SIGQUIT
。因此,oldmask
恢复旧的信号掩码(无论信号掩码,在<{1}}的调用之前)。