简体   繁体   English

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

[英]Why do I need to use the sigemptyset() function before the sigaddset()?

I was told that every time I want to use sigset_t block_mask , I also need to use the sigemptyset() function before I use sigaddset() . 有人告诉我,我想每次都使用sigset_t block_mask ,我还需要使用sigemptyset()函数之前我用sigaddset() For example: 例如:

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

Why do I need to do it every time? 为什么每次都需要这样做?

sigaddset changes a single signal in the set, but leaves the information about all other signals unaffected. sigaddset更改集合中的单个信号,但不影响所有其他信号的信息。 Without sigemptyset , that other information would not have been initialized. 没有sigemptyset ,其他信息将不会被初始化。

Think of a signal set as a bitmask, something like this: 将信号集视为位掩码,如下所示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM