Linux 信号集 及其 部分函数

2023-09-18 22:03:11

这几个函数都是对自己自定义的信号集操作

int sigemptyset(sigset_t *set)

功能:清空信号集中的数据,将所有的标志位置为0

参数:set需要操作的信号集

返回值:成功0失败-1

int sigfillset(sigset_t *set)

功能:清空信号集中的数据,将所有的标志位置为1

参数:set需要操作的信号集

返回值:成功0失败-1

int sigaddset(sigset_t *set, int signum)

功能:设置信号集的某个标志位为1,阻塞这个信号

参数:set需要操作的信号集

           signum:需要阻塞的那个信号

返回值:成功0失败-1

int sigdelset(sigset_t *set, int signum)

功能:设置信号集的某个标志位为0,不阻塞这个信号

参数:set需要操作的信号集

           signum:需要不阻塞的那个信号

返回值:成功0失败-1

int sigismember(const  sigset_t *set, int signum)

功能:某个信号是否堵塞

参数:set需要操作的信号集

           signum:需要判断的那个信号

返回值:1:signum堵塞   0:不堵塞

对系统的信号集进行操作只能通过下面的函数操作

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

功能:将自定义信号集中的信号设置到内核中(设置阻塞,解除阻塞,替换)

参数:

        -how:如何对内核阻塞信号集处理

                -SIG_BLOCK:将用户设置的阻塞信号添加到内核中,内核原来的数据被1替换

                                假设内核中的阻塞信号集是mask   mask | set 就把1传递过去了

                -SIG_UNBLOCK:根据用户设置的数据,对内核中的数据进行解除阻塞

                                 mask &= ~set

                -SIG_SETMASK:覆盖原来的信号集

        -set:已经初始化好的自定义信号集

        -oldset:保存设置之前的内核中的阻塞信号集的状态

返回值:成功0失败-1

int sigpending(sigset_t * set)

功能:获取内核中的未决信号集

参数:set保存的是内核中的未决信号集的信息

#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
int main() {
    sigset_t set;
    sigemptyset(&set);
    sigaddset(&set, SIGINT);
    sigaddset(&set, SIGQUIT);

    sigprocmask(SIG_BLOCK, &set, NULL);
    while (1)
    {
        sigset_t pendingset;
        sigemptyset(&pendingset);
        sigpending(&pendingset);
        for(int i = 1; i <= 32; i++) {
            if(sigismember(&pendingset, i) == 1) {
                printf("1");
            } else if(sigismember(&pendingset, i) == 0) {
                printf("0");
            }else{
                perror("sigismember");
                return 0;
            }
        }
        printf("\n");
    }
    
    return 0;
}

更多推荐

UE4 C++ 使用第三方库(动态库) 详解

目录1代码共享的方式2使用三方库2.1准备一个动态库(包含.h;.lib;.dll)2.2创建一个UEC++工程2.3配置三方库1代码共享的方式在使用三方库之前,先介绍一下三方库的由来,以及为什么需要三方库。就从程序员共享代码成果开始讲述。1)三种共享方式:代码分发也就是代码共享的方式有三种:源码、动态库、静态库。源码

陕西省高级工程师职称评审条件

一.评审范围全省范围具有合法生产,经营手续的中小企业局和非公有制经济从事工程师工作专业技术人员和高技能人员,均可申报当年达到法定退休或已办退休的人员,不大参加职称评审。评审专业领域;机械,材料,冶金,电气,电子,信息通信,仪器仪表,能源动力,控制工程,计算机,自动化,人工智能,广播电视,建设,土木,水利,测绘,化工,地

GAN入门|第四篇:生成手势图像|可控制生成

🍨本文为🔗365天深度学习训练营中的学习记录博客🏡我的环境:语言环境:Python3.10.11编译器:JupyterNotebook深度学习框架:Pytorch2.0.1+cu118显卡(GPU):NVIDIAGeForceRTX4070👉考虑到大家算力有限,这里为大家提供我已经训练好生成器模型,大家可自行下

前端之webpck的优化

一、webpack的打包流程/webpack的机制/原理/webpack是怎么打包的1webpack是根据运行的指令来决定一个基本的业务流程2如果是build就是执行打包,如果是配合了devServer就是就行本地化的调试。两者其实在本质上没有太大区别,只是devServer会运行一个node服务器来进行本地化调试,打

构建工具Webpack简介

一、构建工具当我们习惯了Node中使用ES模块化编写代码以后,用原生的HTML、CSS、JS这些东西会感觉到各种不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。这时候我们就希望有一个工具能对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,

pdf文件太大如何处理?教你pdf压缩简单方法

PDF文件过大,是很多人在使用PDF文件时都遇到过的一个常见问题,过大的PDF文件不仅会占用大量的存储空间,还会影响文件传输和处理效率,下面给大家总结了几个方法,帮助大家解决PDF文件过大的问题。方法一:嗨格式压缩大师这是一款专业的文件压缩工具,支持多种文件格式的压缩,包括PDF文件,它具有简单易用的界面,可以帮助用户

爬虫介绍及举例

爬虫(Webcrawler)指的是一种自动化程序,可以通过互联网上的URL,按照一定的规则,自动地抓取目标网站的数据,包括文字、图片、视频等,然后将这些数据进行处理、分析、存储或展示。举例来说,爬虫可以用于搜索引擎的抓取和索引,比如Google、百度等。当用户输入关键字进行搜索时,搜索引擎便会调用爬虫程序到网络上抓取相

Ebay易贝商品详情数据接口

易贝商品详情数据接口可以用于获取易贝商品详情信息,包括商品链接、状态、标题、简介、分类、商品图片、销量、价格等。获取易贝商品详情数据的接口是item_get,其请求参数为num_iid(EBAY商品ID),通过传入该参数可以获取商品详情数。易贝商品详情数据接口的具体使用方法如下:注册并获取API密钥。通过调用相应的AP

Docker Compose

文章目录简介compose文件一、文件简介二、version三、services1.build:2.image3.container_name4.ports5.command6.depends_on7.deploy8.networks9.volumes四、networks1.name2.driver3.attachab

加速老化测试目的是什么?

加速老化测试使用加速应力的组合来暴露产品设计和制造中的产品缺陷。这有助于提高产品可靠性并减少现场故障和保修费用。加速老化测试在环境室中进行,高温加速有效时间,通常与所有振动台结合使用,产生全轴振动。加速老化测试可分为高加速寿命测试(HALT)和高加速应力筛选(HASS)。这两种技术都使用远远超出产品正常工作条件的应力,

IT隔离电源系统在医院低压配电箱中的应用

【摘要】参考国外及国际对医疗领域的相应标准,结合我国有关的规范%标准,对手术室等处的供配电系统作出了探讨;论述了IT配电系统在医院的应用范围;分析了IT系统接地故障的特点;提出了医院手术室IT电源系统的基本配置。【关键词】手术室配电系统;故障;绝缘监视;漏电198.2138.07290引言*近,本院就北部分院的两百多个

热文推荐