为什么我需要在sigaddset()之前使用sigemptyset()函数?

时间:2014-11-04 07:50:22

标签: signals posix

有人告诉我,每次我想使用sigset_t block_mask时,我都需要在使用sigemptyset()之前使用sigaddset()函数。例如:

sigset_t block_mask;
sigemptyset(&block_mask);
sigaddset(&block_mask, SIGSEGV);

为什么我每次都需要这样做?

1 个答案:

答案 0 :(得分:1)

sigaddset更改集合中的单个信号,但保留所有其他信号的信息不受影响。 没有sigemptyset,其他信息就不会被初始化。

将信号设置为位掩码,如下所示:

sigset_t block_mask;                int block_mask;
sigemptyset(&block_mask);           block_mask = 0;
sigaddset(&block_mask, SIGSEGV);    block_mask |= 1 << SIGSEGV;