Linux学习之系统编程篇:与信号集有关的函数

一、自定义信号集

(1)类型:sigset_t (本质是位图)
(2)设置自定义信号集方法:

 sigset_t set; //创建一个自定义信号集
 sigemptyset(&set); //创建后,默认是随机数,所以跟着置空
 func(&set); //设置自定义信号集(func 详见下 5 个函数) 

(3)设置自定义信号集函数:5 个

int sigemptyset(sigset_t *set); // 将自定义信号集置空(置 0)// 不阻塞任何信号
int sigfillset(sigset_t *set); // 将自定义信号集置 1 // 阻塞所有信号
int sigaddset(sigset_t *set, int signum); // 将某个信号在自定义信号集置 1 
int sigdelset(sigset_t *set, int signum); // 将某个信号在自定义信号集置 0
int sigismember(const sigset_t *set, int signum); // 判断某个信号在集合内是否为 1

二、通过“自定义信号集”设置“阻塞信号集”的函数

通过“自定义信号集”设置“阻塞信号集”的函数:sigprocmask
(1)函数原型:

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

(2)参数:
how :如何映射的,有三种
1)SIG_BLOCK :阻塞 ,自定义信号集和阻塞信号集 两个位图取或 。即:某个信号被其中任意一个集合阻塞,最终结果就是阻塞。
2)SIG_UNBLOCK :解除阻塞 ,先查看自定义信号集,记录设置为 1 的位置, 再查看阻塞信号集,对应位置,若是 1,改为 0,若是 0,则不动。
3)SIG_SETMASK :同步 ,自定义信号集覆盖阻塞信号集。
sigset_t *set: 传入参数,传入自定义信号集的地址。
sigset_t *oldest:传出参数,设置之前阻塞信号集状态 不关心,传 NULL。

三、读取当前进程未决信号集

读取当前进程未决信号集:sigpending 函数。
(1)函数原型:

int sigpending(sigset_t *set);

注意:为传出参数,而 set 是位图,无法直接读取,所以常配合 sigismember 使用。
(2)练习:打印当前进程的未决信号集

sigset_t set; // 定义一个信号集,用于存储未决信号集信息
sigpending(&set); // 获得未决信号集信息
for(int i = 1; i < 32; i++) // 循环读取 //注意:信号集编号 1-31
{
 if( sigismember(&set, i) ) { 
 printf(1);
}
else {
 printf(0);
} }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值