【发布时间】:2013-01-06 15:43:32
【问题描述】:
我正在学习 Unix 中的信号处理,但很难理解 sigprocmask() 中的 SIG_SETMASK 和 o_set 是什么,它们的作用是什么?
我了解set 包含要阻止或取消阻止的信号列表,SIG_BLOCK 阻止列表中的信号,SIG_UNBLOCK 取消阻止它们。
sigprocmask(SIG_SETMASK,&set,& o_set);
【问题讨论】:
我正在学习 Unix 中的信号处理,但很难理解 sigprocmask() 中的 SIG_SETMASK 和 o_set 是什么,它们的作用是什么?
我了解set 包含要阻止或取消阻止的信号列表,SIG_BLOCK 阻止列表中的信号,SIG_UNBLOCK 取消阻止它们。
sigprocmask(SIG_SETMASK,&set,& o_set);
【问题讨论】:
Linux manpage 很好地解释了这一点。
如果该参数不为空,则信号掩码的先前值存储在最后一个参数(旧集)中。
SIG_SETMASK 设置当前信号集。我不确定对此还有什么要说的 - SIG_BLOCK 和 SIG_UNBLOCK 将当前信号掩码与第二个参数结合起来,SIG_SETMASK 设置它而不考虑当前值。
POSIX 是这样解释的:
SIG_BLOCK
结果集应是当前集和集指向的信号集的并集。SIG_SETMASK
结果集应该是set指向的信号集。SIG_UNBLOCK
结果集应该是当前集和set指向的信号集的补集的交集。
【讨论】: