编写安全的信号处理函数

引言

我们都知道signal函数可以对我们设置的特定信号进行特定的操作,但这不意味着我们可以随心所欲的设置处理函数,信号处理函数通常很麻烦,因为它不但与主程序之间是并发的,而且与其他的信号处理函数并发,这就意味着会出现一个问题,如果他们访问了同一个全局变量,上一个程序已经把这些信息存入程序的上下文中,与之并发的程序又修改了这个信息,这显然会产生不可预料的结果,所以程序员有义务编写一个安全的信号处理函数

我们首先知道了我们一些不当的操作会造成一些不可预料的错误,而且这类错误通常是很难发现的,那么我们怎么样才不会造成这些错误呢

首先我们的linux中有一些Linux保证安全的系统级函数,也就是说这些函数不会造成以上我们说的错误 那有哪些函数是安全的系统级函数呢

在这里插入图片描述
以上列出了Linux系统保证安全的系统级函数

我们发现其中我们的标准输入输出函数是没有办法使用的 也就是说如果我们在信号处理函数中使用了不安全的函数 就有可能发生隐式的错误

使用write函数
在这种情况下write 显然是一个十分优秀的选择 我们只需要把文件描述符换为标准输出即可

write(1,str,strlen(str));

有趣的事情发生了 strlen也不是一个异步信号安全的函数 那该怎么办呢 csapp上给出了一个自行编写的SIO(安全的I/O包) 其中包含了一些安全的输出函数 其实现就是包装了一些异步安全的函数和一些简单的字符串操作 所以我们在使用的的时候可以自行编写 也可直接调库

SIO包的使用请查看这篇文章----》SIO包是什么

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李兆龙的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值