1.未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,
在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。
阻塞信号集也叫做当前进程的信号屏蔽字(Signal Mask),这里的“屏蔽”应该理解为阻塞而不是忽略。

2.sigset--装信号的容器
信号能被装进容器吗?能。
为什么需要容器来装信号?其实还是方便 linux 内核处理信号,当然也方便用户程序处理。试想一下,如果同时发送了好多不同的
信号给进程,然而进程一次只能处理一个信号,所以进程得把接收到的信号先保存起来才行。

3. sigset_t
POSIX定义一个数据结构—— sigset_t ,typedef定义的数据类型,一个64位宽度的整数,是一个信号集合。信号的编号是从1到64这个范围。
而sigset_t正好是一个64位整数,所以有时候sigset_t也被称为信号位图。

操作 sigset_t 的函数
操作sigset_t的函数主要有 5 个。
sigemptyset (清空集合,所有比特位置 0)
sigfillset (填充集合,所有比特位置 1)
sigaddset (添加信号到集合,将某一比特位置 1)
sigdelset (删除某个信号,将某一比特位置 0)
sigismember (是否存在某个信号,判断某一比特位是否为 1)

3.1 打印sigset_t的函数
void printsigset(const sigset_t *set)
{
for (int i = 1; i <= 64; i++) {
if (i==33) putchar(' ');
if (sigismember(set, i) == 1)
putchar('1');
else
putchar('0');
}
puts("");
}

3.2 填充sigset_t
sigfillset(&st);
printsigset(&st);
结果:
11111111111111111111111111111110 01111111111111111111111111111111

3.3 清空sigset_t
sigemptyset(&st);
printsigset(&st);
结果:
00000000000000000000000000000000 00000000000000000000000000000000

3.4 添加信号
sigaddset(&st, SIGHUP);
sigaddset(&st, SIGINT);
sigaddset(&st, SIGKILL);
sigaddset(&st, SIGSYS);
sigaddset(&st, SIGRTMIN);
sigaddset(&st, SIGRTMAX);
printsigset(&st);
上面这段代码一共添加了 6 个不同的信号,可以发现信号对应的比特位都被置1了。
结果:
11000000100000000000000000000010 01000000000000000000000000000001

3.5 删除信号
sigdelset(&st, SIGKILL);
printsigset(&st);
这里只删除了信号 9(SIGKILL),发现第 9 个比特位被置 0了。
结果:
11000000000000000000000000000010 01000000000000000000000000000001

3.6 判断集合里是否存在某个信号
if (sigismember(&st, SIGKILL)) {
printf("SIGKILL is member\n");
}
if (sigismember(&st, SIGINT)) {
printf("SIGINT is member\n");
}
结果:因为 SIGKILL 刚刚被删除了,所以这里只打印了 SIGINT.
SIGINT is member

待看:http://blog.csdn.net/zhangxiao93/article/details/52583127

http://blog.csdn.net/anonymalias/article/details/9219945

进程间通信--POSIX信号量的更多相关文章

  1. Linux进程间通信IPC学习笔记之同步二(Posix 信号量)

    Linux进程间通信IPC学习笔记之同步二(Posix 信号量)

  2. 进程间通信之POSIX信号量

    POSIX信号量接口,意在解决XSI信号量接口的几个不足之处: POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现. POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉 ...

  3. Linux进程同步之POSIX信号量

    POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分.在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V ...

  4. linux内核剖析(十)进程间通信之-信号量semaphore

    信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线 ...

  5. system V信号量和Posix信号量

    一.函数上的区别 信号量有两种实现:传统的System V信号量和新的POSIX信号量.它们所提供的函数很容易被区分:对于所有System V信号量函数,在它们的名字里面没有下划线.例如,应该是sem ...

  6. Linux进程间通信之信号量

    春节过去了,真的过去一年了.在公司待了快一年了.2016希望自己变得越来越好. ps:上面那句话是年前写的,中间隔了那么久,自己也变懒了. 一.信号量 1,信号量本质是一个计数器,控制访问共享资源的最 ...

  7. 第10章 Posix 信号量

    10.1 概述 10.1.1 信号量类型 Posix有名信号量:使用Posix IPC名字,可用于进程或线程间同步: Posix基于内存的信号量:也叫做无名信号量,存放在共享内存中,可用于进程或线程间 ...

  8. Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题

    Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink sem_wait sem_post ...

  9. POSIX信号量

    DESCRIPTION POSIX 信号量允许进程间和线程间同步他们的操作. 一个信号量是一个整型(integer),其值不能小于0. 信号量允许2中操作:给信号量的值加1(sem_post); 给信 ...

随机推荐

  1. LeetCode--066--加一

    问题描述: 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. ...

  2. layui图片显示

    有些东西看文档可以实现,但当真不如自己写的实在.所以还是记录下来吧. 1. 图片赋值 <div id="layer-photos-demo" class="laye ...

  3. zzuli1985(dp/水dfs郑轻比赛)

    再一次感受到dp的威力 1985: 即将到来的新生赛 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 112  Solved: 28 SubmitStat ...

  4. OAF Sample Code(转)

    原文地址: OAF Sample Code

  5. 使用dbms_output.put_line打印异常所在的行

    dbms_output.put_line(dbms_utility.format_error_stack); dbms_output.put_line(dbms_utility.format_call ...

  6. java深浅拷贝

    转载:http://atjava.iteye.com/blog/1722501 首先我们看看浅拷贝和深拷贝的定义 浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制 深拷贝:对象, ...

  7. python读写csv时中文乱码问题解决办法

    https://www.cnblogs.com/shengulong/p/7097869.html 参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写, ...

  8. iOS系统版本与机型的对应关系

    1.手机系统版本:10.3 NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; 2.手机类型:iPhone 6 NSS ...

  9. Tomcat服务器启动失败:Could not publish server configuration for Tomcat v8.0 Server at localhost. Multiple Contexts have a path of

    在eclipse中使用Tomcat8.0时,出现了如下错误: 解决办法: 在建立Tomcat服务时,eclipse会自动生成一个Servers的项目. 在这个项目中,找到你部署项目的服务文件夹. 在这 ...

  10. Android Mms之:深入MMS支持

    Composing and editing MMS在Android Mms应用里面的具体实现形式,或数据结构是SlideshowModel,它是一个每个节点为SlideModel的ArrayList, ...