[学习笔记]信号处理函数遇上可重入和不可重入函数


可重入函数概念

q  为了增强程序的稳定性,在信号处理函数中应使用可重入函数。

q  所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。因为进程在收到信号后,就将跳转到信号处理函数去接着执行。如果信号处理函数中使用了不可重入函数,那么信号处理函数可能会修改原来进程中不应该被修改的数据,这样进程从信号处理函数中返回接着执行时,可能会出现不可预料的后果。不可再入函数在信号处理函数中被视为不安全函数。

q  满足下列条件的函数多数是不可再入的:(1)使用静态的数据结构,如getlogin(),gmtime(),getgrgid(),getgrnam(),getpwuid()以及getpwnam()等等;(2)函数实现时,调用了malloc()或者free()函数;(3)实现时使用了标准I/O函数的


man手册实践

man 7 signal 查找可重入函数和不可重入函数,下一个内核用文件描述符来优化信号


结论:

在信号处理函数中,尽量不使用全局变量和静态变量的函数。特别是这个变量在程序中随时读写。

复制去Google翻译翻译结果

时间: 2024-08-29 19:35:47

[学习笔记]信号处理函数遇上可重入和不可重入函数的相关文章

python 学习笔记 3 -- 数据结构篇上

数据结构是可以处理一些 数据 的 结构 .或者说,它们是用来存储一组相关数据的.在Python中有三种内建的数据结构--列表.元组和字典.本文主要对这三种数据类型以及相关的使用做介绍,以例子的形式演示更加容易理解! 1.列表(List) 列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.在Python中,你在每个项目之间用逗号分割. 列表中的项目应该包括在**方括号**中,这样Python就知道你是在指明一个列表.一旦你创建了一个列表,你可以添加.删除或是搜索列表中的

Maven学习笔记之——仓库(上)

Maven学习笔记之--仓库(上) 1.    何为maven仓库 Maven可以在某一指定位置统一存放所有maven项目共享的构件.此指定位置就是maven仓库.实际的项目将不再自己存放其所依赖的构件.他们只需要声明这些依赖的坐标.在需要的时候就会自动根据坐标找到仓库中的构件.并使用他们. 仓库的意义:减少磁盘占用空间.去除大量重复的构件.尤其是项目越来越多.越来越大的时候.更便于统一管理所有控件. 2.    仓库的布局 任何一个构件都有其唯一的坐标.根据这个坐标可以定义其在仓库中的唯一存储

树莓派学习笔记——定时向yeelink上传树莓派CPU温度

0 前言 本文通过python文件IO操作获得树莓派CPU温度信息,通过python request库周期性向yeelink平台上传温度,修改rc.local脚本使得该python脚本在开机时便在后台运行,向平台每5分钟上报一次温度信息. 网上查阅了很多关于linux开机启动的博文,尝试了几遍居然发现方法都无法实现开机启动效果.我想可能是操作系统或开发环境的微小差异产生的,如果发现博文中的内容存在问题,请及时留言,我查证之后定当修改. [相关博文] [树莓派学习笔记--获取树莓派CPU温度] [

openGL学习笔记二:看看上一篇我们写的代码

哈哈, 千呼万唤始出来, 我们第二篇笔记新鲜出炉了( 话说不是没隔多久么....) 呵呵, 闲话不多说, 我们来看看上一篇我们写的代码, 知其然也要知其所以然啊 #include <gl/glut.h> void display() { glClear( GL_COLOR_BUFFER_BIT); glRectf( -1, -1, 1, 1); glFinish(); } int main( int argc, char* argv[]) { glutInit( &argc, argv

javascript高级程序设计 学习笔记 第五章 上

第五章 引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScript 从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法. 对象是某个特定引用类型的实例.新对象是使用 new 操作符后跟一个构造函数来创建的. 构造函数本身就是一个函数,只不过该函数是出于创建新

[原创]java WEB学习笔记50:文件上传案例

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

ijkplayer阅读学习笔记之从代码上看播放流程

看了很久的ijkplayer的视频播放,其实还是没有怎么看懂,只是个人浅浅的笔记 关键部分就是联网获取数据那部分,还没有搞定其实 从用户点击一个已有地址的网络视频开始,从源码分析播放流程. 1.        // init player  加载native底层库 IjkMediaPlayer.loadLibrariesOnce(null); IjkMediaPlayer.native_profileBegin("libijkplayer.so"); 第一句话是加载三个重要的so文件

Unix网络编程学习笔记之第6章 I/O复用:select和poll函数

一.I/O复用应用场合 1. 当客户处理多个描述符(既有标准输入,又有网络套接字)时,必须使用IO复用. 2. 一个客户同时处理多个套接字是可能的. 3. 如果一个服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用. 4. 如果一个服务器既要处理TCP,又要处理UDP,一般就要I/O复用. 5. 如果一个服务器要处理多个服务或协议,就要用到I/O复用. 其实IO复用就是一个进程/线程处理多个套接字描述符. 二. I/O模型 Unix提供了5种I/O模型: 1. 阻塞式I/O模

【Linux 学习笔记】戏说Git (上)

本文为<廖雪峰Git教程>学习笔记,原地址: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 萌新入门,略有心得,戏说一番. 本章包括两部分内容, 1. git 本地库中文件的添加和提交: 2. 连接github 添加远程库 先来个正版概念镇个贴: Git是目前世界上最先进的分布式版本控制系统(没有之一). 假设, 我是一个单机游戏爱好者(好吧这不是假设..) 那么Git 就可

UNIX网络编程学习笔记2 需要用到的一些字节操纵和格式转换函数

当然这些东西是炒鸡无聊的,但是真当自己开始撸代码时才发现熟悉这些枯燥的函数能够节约大量的时间.于是总结一下: 字节序:低序字节存储在起始地址,这称为小端(little-endian),高序字节存储在起始地址,这称为大端(big-endian) 例:存放0x0A0B0C0D LE: 0D 0C 0B 0A BE: 0A 0B 0C 0D 小端的存放方式更加接近于人类思维 网际协议使用大端字节序来传送多字节整数(为何要规定一个字节序来传输ip和port? 呸 这样子协议才能正确“看懂”(解释)这些地