linux信号--信号集操作函数,信号阻塞与未决

信号集操作函数,信号阻塞与未决

一、信号集及相关操作函数
信号集被定义为一种数据类型:

typedef struct {

                       unsigned long sig[_NSIG_WORDS]} sigset_t

信号集用来描述信号的集合,每个信号占用一位(64位)。Linux所支持的所有信号可以全部或部分的出现在信号集中,主要与信号阻塞相关函数配合使用。下面是为信号集操作定义的相关函数:

#include <signal.h>

int sigemptyset(sigset_t *set)//信号集里面的所有信号被清空,相当于64为置0;

int sigfillset(sigset_t *set)//相当于64为都置1;

int sigaddset(sigset_t *set, int signum)//在set指向的信号集中加入signum信号

int sigdelset(sigset_t *set, int signum)//在set指向的信号集中删除signum信号

int sigismember(const sigset_t *set, int signum)//判定信号signum是否在set指向的信号集中

sigemptyset(sigset_t *set):信号集里面的所有信号被清空,相当于64为置0;
sigfillset(sigset_t *set):相当于64为都置1;
sigaddset(sigset_t *set, int signum):在set指向的信号集中加入signum信号,相当于将给定信号所对应的位置1;
sigdelset(sigset_t *set, int signum):在set指向的信号集中删除signum信号,相当于将给定信号所对应的位置0;
sigismember(const sigset_t *set, int signum):判定信号signum是否在set指向的信号集中,相当于检查给定信号所对应的位是0还是1。

二、信号阻塞及未决相关的函数操作:

#include <signal.h>

int  sigprocmask(int  how,  const  sigset_t *set, sigset_t *oldset))int sigpending(sigset_t *set));

int sigsuspend(const sigset_t *mask))

sigprocmask()函数能够根据参数how来实现对信号集的操作,操作主要有三种:

SIG_BLOCK :在阻塞信号集中添加set指向信号集中的信号,相当于:mask=mask|set
SIG_UNBLOCK :如果进程阻塞信号集中包含set信号集中的信号,则解除对该信号的阻塞,相当于:mask=mask|~set
SIG_SETMASK :更新阻塞信号集为set指向的信号集,相当于mask=set

sigpending(sigset_t *set))获得当前已递送到进程,却被阻塞的所有信号,在set指向的信号集中返回结果。

sigsuspend(const sigset_t *mask))用于在接收到某个信号之前, 临时用mask替换进程的信号掩码, 并暂停进程执行,直到收到信号为止。
sigsuspend 返回后将恢复调用之前的信号掩码。信号处理函数完成后,进程将继续执行。该系统调用始终返回-1,并将errno设置为EINTR。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值