我正在学习Unix中的信号处理,并且很难理解SIG_SETMASK
中的o_set
和sigprocmask()
以及他们做了什么?
我了解set
包含要阻止或取消阻止的信号列表,SIG_BLOCK
阻止列表中的信号,SIG_UNBLOCK
取消阻止它们。
sigprocmask(SIG_SETMASK,&set,& o_set);
答案 0 :(得分:3)
Linux manpage很好地解释了这一点。
如果该参数非空,则信号掩码的先前值存储在最后一个参数(旧集)中。
SIG_SETMASK
设置当前信号集。我不确定还有什么可说的 - SIG_BLOCK
和SIG_UNBLOCK
将当前信号掩码与第二个参数组合在一起,SIG_SETMASK
无论当前值如何都设置它。
POSIX解释如下:
SIG_BLOCK
结果集应该是当前集和由set指向的信号集的并集。SIG_SETMASK
结果集应为set指向的信号集SIG_UNBLOCK
结果集应该是当前集和由set指向的信号集的补码的交集。