信号集操作

信号递达:信号的处理动作(绑定的处理函数)。

信号的未决状态:信号从产生到递达之间的状态。

某个信号处于未决状态,一般是因为信号被阻塞(即信号屏蔽字对应的位被置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

 

posted @ 2023-03-28 11:07  踏浪而来的人  阅读(15)  评论(0编辑  收藏  举报