信号集操作
信号递达:信号的处理动作(绑定的处理函数)。
信号的未决状态:信号从产生到递达之间的状态。
某个信号处于未决状态,一般是因为信号被阻塞(即信号屏蔽字对应的位被置1)了,即当捕获到这个信号时,由于信号处于未决状态,将不会执行信号的处理动作。
int sigemptyset(sigset_t *set);//将信号集清0 int sigfillset(sigset_t *set);//将信号集置1 int sigaddset(sigset_t *set, int signum);//将某个信号加入信号集 int sigdelset(sigset_t *set, int signum);//将某个信号清出信号集 返回值:成功:0
失败:-1
int sigismember(const sigset_t *set, int signum);//判断某个信号是否在信号集中 返回值:在集合:1
不在:0
出错:-1
int sigprocmask(int how, const sigset_t *set, sigset_t *oset);//读取或更改进程的阻塞信号集
参数:
set:更改进程的信号屏蔽字,是一个位图,set中哪位置1,就表示当前进程屏蔽哪个信号
oset:读取进程的当前信号屏蔽字(保存旧的信号屏蔽集),并通过oset参数传出
how:如何更改进程的信号屏蔽字,有如下值(假设当前的信号屏蔽字为mask):
SIG_BLOCK:将我们信号集中的信号添加到当前的信号屏蔽字中。相当于 mask = mask | set
SIG_UNBLOCK:将我们信号集中的信号从当前的信号屏蔽字中解除。相当于 mask = mask & ~set
SIG_SETMASK:用我们信号集中的信号代替原始的信号屏蔽字。相当于 mask = set
返回值:
成功:0
失败:-1,设置errno
int sigpending(sigset_t *set);//读取当前进程的未决信号集,通过set参数传出
返回值:
成功:0
失败:-1,设置errno