linux 信号 信号集

int sigemptyset(sigset_t *set);   //清除所有信号
int sigfillset(sigset_t *set);          //包括所有信号
int sigaddset(sigset_t *set, int signum);    //设置一个信号位
int sigdelset(sigset_t *set, int signum);     //删除一个信号位

int sigismember(const sigset_t *set, int signum);  // 真返回1  假返回0  

     sigset_t 为信号集变量  前两个函数为初始化函数  中间的为修改函数  最后一个为测试函数

     前四个若成功返回 0  若出错返回-1


>>修改或检测进程的信号屏蔽字

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

    oldset  作为返回值参数  若非空返回当前信号屏蔽字

    set  用以修改信号屏蔽字  具体如何修改取决于how


    how有三个参数

    SIG_BLOCK    当前的信号屏蔽字与进程的信号屏蔽字的并集作为 进程新的信号屏蔽字  P=P|B set包含了希望加入的信号

    SIG_UNBLOCK   当前的信号屏蔽字与进程的信号屏蔽字的补集的交集  作为进程新的信号屏蔽字 P = P & ~B  set包含了希望解除的信号

    SIG_SETMASK    set作为进程新的信号屏蔽字


>>

     int sigpending(sigset_t *set);

    函数返回在送往进程的时候被阻塞挂起的信号集合

    若成功  返回0    若出错  返回-1

>>在信号捕捉程序中进行非局部转移

    int sigsetjmp(sigjmp_buf env, int savesigs);

    void siglongjmp(sigjmp_buf env, int val); 

    当savesigs为非0时 sigsetjmp保存当前信号屏蔽字  

    siglongjmp若信号屏蔽字以保存  那么这个函数将根据保存的信号屏蔽字恢复信号屏蔽字   val为从siglongjmp函数执行后

    sigsetjmp返回的值

     

     注意: 在调用siglongjmp函数前应该用一种方法保证sigsetjmp是已经设定了  env

    






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值