标准C库sigemptyset、sigfillset函数(清空自定义信号集,阻塞信号集所有信号)

news/2024/11/21 1:46:55/

前言

如果,想要深入的学习标准C库中的sigemptyset、sigfillset函数,还是需要去自己阅读Linux系统中的帮助文档。

具体输入命令:

man 3 sigemptyset/sigfillset

即可查阅到完整的资料信息。

sigemptyset 函数

sigemptyset()函数是标准C库(libc)中用于操作自定义信号集(signal set)的一个函数。信号集是一个包含多个信号的集合,通常用于信号处理和控制。sigemptyset()函数的作用是初始化一个自定义信号集,将其所有信号都清空,也就是将信号集中的所有的标志位置为0,使得这个集合不包含任何信号,也就是不阻塞任何信号。此函数通常在设置信号处理程序(signal handler)之前调用,以确保信号集的正确初始化。

函数原型如下:

#include <signal.h> // 使用此函数需导入这个头文件int sigemptyset(sigset_t *set);

参数:

  • set:指向sigset_t类型的指针,sigset_t是一个信号集类型,用于表示一个信号集。我们会把用这个指针指向的信号集清空,也就是不阻塞任何信号。

返回值:

  • 成功时,sigemptyset()函数返回0;
  • 失败时,返回-1,并设置errno表示错误原因。

例如,以下代码展示了如何使用sigemptyset()函数来初始化一个信号集并设置信号处理程序:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>void signal_handler(int signal_number) {printf("Received signal %d\n", signal_number);exit(signal_number);
}int main() {struct sigaction sa;sigset_t signal_set;// 初始化信号集if (sigemptyset(&signal_set) == -1) {perror("sigemptyset");return 1;}// 设置信号处理程序sa.sa_handler = signal_handler;sa.sa_mask = signal_set;sa.sa_flags = 0;// 注册信号处理程序if (sigaction(SIGINT, &sa, NULL) == -1) {perror("sigaction");return 1;}// 进入无限循环,等待信号while (1) {pause();}return 0;
}
  • 这个例子中,我们创建了一个信号集signal_set,并使用sigemptyset()函数将其初始化。然后我们设置信号处理程序,以便在接收到SIGINT信号(通常是用户按下Ctrl+C)时,程序会调用signal_handler()函数。

sigfillset 函数

sigfillset()函数是标准C库(libc)中用于操作自定义信号集的一个函数sigfillset()函数用于初始化一个自定义信号集,将其所有信号都填充满,也就是将信号集中的所有的标志位置为1,使得这个集合包含所有可接受的信号,也就是阻塞所有信号。这个函数可以用于快速创建一个包含所有信号的信号集,然后可以根据需要删除其中的某些信号。

函数原型如下:

#include <signal.h> // 使用此函数需导入这个头文件int sigfillset(sigset_t *set);

参数:

  • set:指向sigset_t类型的指针,sigset_t是一个信号集类型,用于表示一个信号集。

返回值:

  • 成功时,sigfillset()函数返回0;
  • 失败时,返回-1,并设置errno表示错误原因。

例如,以下代码展示了如何使用sigfillset()函数来初始化一个信号集并删除某个信号:

#include <signal.h>
#include <stdio.h>int main() {sigset_t signal_set;// 使用sigfillset()初始化信号集,包含所有可接受的信号if (sigfillset(&signal_set) == -1) {perror("sigfillset");return 1;}// 从信号集中删除SIGINT信号if (sigdelset(&signal_set, SIGINT) == -1) {perror("sigdelset");return 1;}// 检查信号集中是否包含SIGINT信号int result = sigismember(&signal_set, SIGINT);if (result == -1) {perror("sigismember");return 1;} else if (result == 0) {printf("SIGINT is not in the signal set.\n");} else {printf("SIGINT is in the signal set.\n");}return 0;
}
  • 这个例子中,我们创建了一个信号集signal_set,并使用sigfillset()函数将其初始化,使其包含所有可接受的信号。接着,我们使用sigdelset()函数从信号集中删除SIGINT信号。最后,我们使用sigismember()函数检查信号集中是否包含SIGINT信号。

总结

这篇文章介绍了标准C库中的sigemptyset、sigfillset这两个函数。如果大家想要了解更多的标准C库函数知识,Linux系统调用函数知识,大家请看这两篇文章:

  • 标准C库内容简介,标准C库函数常用函数与函数文章索引(不断更新)
  • Linux系统调用函数文章索引

最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容


http://www.ppmy.cn/news/63391.html

相关文章

「AI 孙燕姿」翻唱华语乐坛歌曲爆红全网,AI 翻唱将带来哪些影响?是否会有版权等问题?

在某视频平台上&#xff0c;“AI孙燕姿”成了新网红&#xff0c;它翻唱过周杰伦的《发如雪》、翻唱过郭顶的《水星记》、翻唱过赵雷的《我记得》&#xff0c;受到了网友的追捧&#xff0c;甚至有网友宣布“这是2023年最火的声音”。 网上除了AI孙燕姿&#xff0c;还有AI周杰伦…

详解MySQL慢SQL定位、分析

目录 1.概述 2.慢SQL定位 3.SQL性能分析 3.1.例子 3.2.SQL性能分析 3.3.参数说明 3.3.1.id 3.3.2.select_type 3.3.3.key_len 3.3.4.rows 3.3.5.type 3.3.6.extra 1.概述 解决慢SQL的问题无非3步&#xff1a; 定位慢SQL分析慢SQL优化慢SQL 本文将按顺序介绍前两…

C++之单例模式

文章目录 什么是单例模式&#xff1f;单例模式中的饿汉模式单利模式中的懒汉模式 什么是单例模式&#xff1f; 保证一个类只有一个实例&#xff0c;并提供一个访问它的全局访问点&#xff0c;该实例被所有程序模块共享 单例模式中的饿汉模式 饿汉模式&#xff1a;单例定义的…

聚观早报 | 菜鸟回应明年赴港 IPO;谷歌即将发布最新 AI 大模型

今日要闻&#xff1a;菜鸟回应明年赴港 IPO&#xff1b;谷歌即将发布最新 AI 大模型&#xff1b;中国移动推出周杰伦数字人&#xff1b;“老头乐”销量冠军雷丁汽车申请破产&#xff1b;网信部门工作组进驻斗鱼平台 菜鸟回应明年赴港 IPO 近日&#xff0c;有消息称&#xff0c…

华为OD题目: 取出尽量少的球

华为OD题目&#xff1a; 取出尽量少的球 时间限制: 1s 空间限制: 32MB 限定语言: 不限 题目描述: 某部门开展Family Day开放日活动&#xff0c;其中有个从桶里取球的游戏&#xff0c;游戏规则如下: 有N个容量一样的小桶等距排开&#xff0c;且每个小桶都默认装了数量不等的小…

C# Microsoft.ClearScript.V8脚本使用

1、ClearScript支持的功能和适用场景 微软的.net是非常强大和灵活的&#xff0c;除了C#体系脚本扩展&#xff0c;也支持其他流行的脚本扩展&#xff0c;Microsoft.ClearScript.V8就是一个.NET绑定到Google V8的脚本引擎。它允许.NET应用程序直接从JavaScript代码中调用函数&am…

linux下的Qt打包常见原因分析和雷区,获取一键式打包脚本(能避免各种问题)

目录 一. 大致如下常见问题&#xff1a; &#xff08;1&#xff09;找不到程序所依赖的Qt库 version Qt_5 not found (required by &#xff08;2&#xff09;Could not Load the Qt platform plugin "xcb" in "" even though it was found &#xff0…

单链表OJ题:LeetCode--206.反转链表

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;今天给大家带来的是LeetCode中206题&#xff1a;反转链表 数 据 结 构&#xff1a;数据结构专栏 作 者&#xff1a;stackY、 C 语 言 &#xff1a;C语言专栏 LeetCode &#xff1a;LeetCode刷题训练营 LeetCod…