当前位置: 首页 > news >正文

8.5.5 编写信号处理程序

目录
  • P541

P541

逐行解释 Signal 函数代码

这段代码是一个自定义的信号处理函数封装,使用了 sigaction 系统调用来设置信号处理程序。下面是逐行解释:

handler_t *Signal(int signum, handler_t *handler)
  • 定义了一个名为 Signal 的函数
  • 参数:signum 是要设置的信号编号,handler 是信号处理函数指针
  • 返回类型:handler_t *(指向旧信号处理函数的指针)
struct sigaction action, old_action;
  • 声明两个 sigaction 结构体变量:
    • action:用于设置新的信号处理行为
    • old_action:用于保存之前的信号处理行为
action.sa_handler = handler;
  • 设置 action 的信号处理函数为传入的 handler
sigemptyset(&action.sa_mask);
  • 使用 sigemptyset 清空 sa_mask 信号集
  • 这表示在处理当前信号时,不会阻塞任何其他信号(除了被处理的信号本身会被自动阻塞)
action.sa_flags = SA_RESTART;
  • 设置 sa_flags 标志为 SA_RESTART
  • 这个标志表示如果信号中断了系统调用,系统调用应该自动重启而不是返回错误
if (sigaction(signum, &action, &old_action) < 0)
  • 调用 sigaction 系统调用:
    • signum:要设置的信号编号
    • &action:新的信号处理行为
    • &old_action:保存旧的信号处理行为
  • 检查返回值是否小于0(表示出错)
    unix_error("Signal error");
  • 如果 sigaction 调用失败,调用 unix_error 函数报告错误
return (old_action.sa_handler);
  • 返回旧的信号处理函数指针
http://www.aitangshan.cn/news/26.html

相关文章:

  • Dify入门系列(2)| 5 分钟部署 Dify:云服务 vs 本地 Docker
  • 图论杂题选做 20250802
  • EasyExcel 导入/出通用枚举映射
  • dp09
  • 克隆arcgispro-py3虚拟环境
  • Air780EGH硬件开发必备:UART串口电路设计最佳实践
  • bytes和基本数据类型之间的转换
  • 糟糕,生产环境频繁Full GC,怎么办?
  • CSP/NOIP常用模板大全₍^˶⦁༝⦁˶^₎◞ ̑̑
  • 洛谷P1525 [NOIP 2010 提高组] 关押罪犯(恭喜解锁拆点并查集!!)
  • Score Matching
  • 对象转原始值
  • 通达信配色
  • I2C通信接口 VK2C22B 高抗干扰LED驱动段码液晶驱动芯片
  • 【自学嵌入式:stm32单片机】EXTI外部中断
  • Dify入门系列(1)| Dify 是什么?真能开启低代码 AI 应用开发?
  • 题解:P4368 [Code+#4] 喵呜
  • vue3 vue3-form-element表单生成工具
  • Codeforces 1042G Wafu! 题解 [ 绿 ] [ 数学 ] [ 线性 DP ] [ 前缀和 ] [ 暴力枚举 ]
  • 第二章:Linux基础命令
  • 题解:P4779 【模板】单源最短路径(标准版)
  • 事倍功半是蠢蛋39 cursor 报错user is unauthorized
  • 一个不错的AI写作工具
  • 2025CSP-S模拟赛33 比赛总结