IPC:信号——对内核信号集的操作

2023-10-27

/*

    对内核信号集的操作kernel signal set

    int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
        - 功能:将自定义信号集中的数据设置到内核中(设置阻塞,解除阻塞,替换)
        - 参数:
            - how : 如何对内核阻塞信号集进行处理
                SIG_BLOCK: 将用户设置的阻塞信号集添加到内核中,内核中原来的数据不变
                    假设内核中默认的阻塞信号集是mask, mask | set
                SIG_UNBLOCK: 根据用户设置的数据,对内核中的数据进行解除阻塞
                    mask &= ~set
                SIG_SETMASK:覆盖内核中原来的值
            
            - set :已经初始化好的用户自定义的信号集
            - oldset : 保存设置之前的内核中的阻塞信号集的状态,可以是 NULL

        - 返回值:
            成功:0
            失败:-1
                设置错误号:EFAULT、EINVAL

    int sigpending(sigset_t *set);
        - 功能:获取内核中的未决信号集
        - 参数:set,传出参数,保存的是内核中的未决信号集中的信息。
*/

// 编写一个程序,把所有的常规信号(1-31)的未决状态打印到屏幕
// 设置某些信号是阻塞的,通过键盘产生这些信号

#include <signal.h>
#include <sys/time.h>
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>

int main() {

    // 设置2、3号信号阻塞
    sigset_t set;
    sigemptyset(&set);

    // 将2号和3号信号添加到信号集中
    sigaddset(&set, SIGINT);//2号信号,Ctrl + C 产生
    sigaddset(&set, SIGQUIT);//3号信号,Ctrl + \ 产生

    // 修改内核中的阻塞信号集
    sigprocmask(SIG_BLOCK, &set, NULL);

    int num = 0;

    while(1) {
        num++;
        // 获取当前的未决信号集的数据
        sigset_t pendingset;
        sigemptyset(&pendingset);
        sigpending(&pendingset);

        // 遍历前32位
        for(int i = 1; i <= 31; i++) {
            if(sigismember(&pendingset, i) == 1) {
                printf("1");
            }else if(sigismember(&pendingset, i) == 0) {
                printf("0");
            }else {
                perror("sigismember");
                exit(0);
            }
        }

        printf("\n");
        sleep(1);
        
        if(num == 10) {//循环10次
            // 解除阻塞, 阻塞的信号执行
            sigprocmask(SIG_UNBLOCK, &set, NULL);
        }

    }


    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IPC:信号——对内核信号集的操作 的相关文章

随机推荐

  • 哔哩哔哩弹幕网站大数据分析研究动态

    哔哩哔哩 Bilibili 是一个拥有大量用户和弹幕评论的中文视频网站 因此 进行大数据分析研究对于了解该网站的用户行为和趋势是非常有价值的 研究可以涵盖从用户人口统计到内容分析等方面 例如 可以研究用户的年龄 性别 地理分布等信息 以及他
  • c嵌入式编程设计模式 pdf_嵌入式工程师的100本专业书籍

    001 大话数据结构 002 鸟哥的 linux 私房菜 003 疯狂 android 讲义 004 第一行代码 005 linux 内核设计与实现 006 驱动设计开发 007 linux 内核解密 008 unix 环境高级编程 009
  • cmder 报错 此时不应有 ..., ls 不是内部或外部命令

    检查环境变量 所有的环境变量最后一个路径不要分号 如下 将 分号 和 反斜杠 删除 最后重启cmder 就可以恢复正常 来源于 cmder 此时不应有 以及cmder安装的一些问题
  • WinDump使用方法

    在命令行下启动windump exe 参数列表 a 将网络地址解析为名字 B size 设置网络数据接收缓冲区大小 c count 只抓取count数目个包 D 显示当前系统中所有可用的网卡 e 输出链路层信息 F file 从file文件
  • DFA有限状态自动机之有效数字

    https leetcode cn com problems valid number 根据题目给的算法描述 定义字符类型 用函数返回当前字符类型 挖掘出所有的状态定义出来 enum State state begin state inte
  • 从头到尾教你写个简单的贪吃蛇游戏

    Win32贪吃蛇游戏 YellowLee 20130409 有兴趣的初学者 加入群 75732006 一起讨论 完成代码可下载 在我的上传资源中 http download csdn net detail yellowvivi 525230
  • js实现简单计算器

  • java文档注释

    Java 文档注释 Java 支持三种注释方式 前两种分别是 和 第三种被称作说明注释 它以 开始 以 结束 说明注释允许你在程序中嵌入关于程序的信息 你可以使用 javadoc 工具软件来生成信息 并输出到HTML文件中 说明注释 使你更
  • TCP/IP协议学习记录之二十七:RTP和RTMP

    以上两个协议和多媒体传输有关 所以今天特地来学习学习 转载自 https www cnblogs com yoyotl p 5650101 html https www cnblogs com lidabo p 7233154 html R
  • SLR(1)分析法

    文章目录 SLR分析法的基本思想 SLR 1 分析表的构造 LR 0 文法要求文法的每一个LR 0 项目都不含有冲突的项目 这个条件比较苛刻 对于大多数程序设计语言来说 一般都不能满足LR 0 文法的条件 例如 不难看出在状态 I 2 I
  • 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    斐波那契数列 Fibonacci sequence 又称黄金分割数列 指的是这样一个数列 0 1 1 2 3 5 8 13 21 34 如果要输出这样的数列 实际上很简单 每一个数等于前两个数之和 但如果转化为问题 能否判断出时斐波那契数列
  • 【C++登山之路之初露锋芒 2】——内联函数+ 引用+auto+nullptr关键字(万字详解,图片演示,结构原理)

    目录 1 内联函数 2 引用 2 1引用涉及的隐式类型转换和权限问题 2 2引用和指针 3 auto关键字 4 nullptr关键字 内联函数 以inline修饰的函数叫做内联函数 编译时C 编译器会在调用内联函数的地方展开 没有函数压栈的
  • Python爬虫深度优化:Scrapy库的高级使用和调优

    在我们前面的文章中 我们探索了如何使用Scrapy库创建一个基础的爬虫 了解了如何使用选择器和Item提取数据 以及如何使用Pipelines处理数据 在本篇高级教程中 我们将深入探讨如何优化和调整Scrapy爬虫的性能 以及如何处理更复杂
  • 第五周课程总结&试验报告(三)

    Java实验报告 班级 计科二班 学号 20188423 姓名 邹健 完成时间 2019 9 27 评分等级 实验三 String类的应用 一 实验目的 1 掌握类String类的使用 2 学会使用JDK帮助文档 二 实验内容 1 已知字符
  • Antd表格组件(table)可编辑单元格使用

    Antd表格组件 table 可编辑单元格使用 export default function Category const category setcategory useState 创建上下文关系对象 const EditableCon
  • 在Android5上安装termux0.118并安装Debian和桌面环境

    教程老旧 不保证能用 众所周知 官方的termux在0 73后就不支持Android5和6了 更新于2023 2 26 14 43 不限速下载 密码2023 这两个是支持Android5和6的最新版本 按照手机的架构下载 安装完成后输入 v
  • 基于人工智能与边缘计算Aidlux的工业表面缺陷检测

    一 训练yolov8得到onnx模型 相关教程有很多 二 模型转化 网站 https aimo aidlux com 输入试用账号和密码 账号 AIMOTC001 密码 AIMOTC001 我们选择 TensorFlowLite 一步步完成
  • 一篇不错的v4l2

    其实 我刚开始一直都不知道怎么写驱动 什么都不懂的 只知道我需要在做项目的过程中学习 所以 我就自己找了一个关于编写Linux下的视频采集监控项目做 然后上学期刚开学的时候听师兄说 跟院长做项目 没做出来也没关系 所以直接退出博士的团队 投
  • Xshell 7下载、安装步骤与使用教程

    Xshell 7下载 安装步骤与使用教程 一 内容 二 下载地址 三 安装步骤 四 Xshell7使用教程 一 内容 Xshell是一款功能强大的远程终端连接管理软件 支持多种远程协议 可以在多端进行高效安全的远程连接 同时还可以帮助你有效
  • IPC:信号——对内核信号集的操作

    对内核信号集的操作kernel signal set int sigprocmask int how const sigset t set sigset t oldset 功能 将自定义信号集中的数据设置到内核中 设置阻塞 解除阻塞 替换