linux新的API signalfd、timerfd、eventfd使用说明
三种新的fd加入linux内核的的版本:
signalfd:2.6.22
timerfd:2.6.25
eventfd:2.6.22
三种fd的意义:
signalfd:传统的处理信号的方式是注册信号处理函数;由于信号是异步发生的,要解决数据的并发访问,可重入问题。signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到select、poll、epoll等监听队列中。
timerfd:可以实现定时器的功能,将定时器抽象为文件描述符,当定时器到期时可以对其read,这样也可以放到监听队列的主循环中。
eventfd:实现了线程之间事件通知的方式,eventfd的缓冲区大小是sizeof(uint64_t);向其write可以递增这个计数器,read操作可以读取,并进行清零;eventfd也可以放到监听队列中,当计数器不是0时,有可读事件发生,可以进行读取。
三种新的fd都可以进行监听,当有事件触发时,有可读事件发生。
signalfd涉及API:
- #include <sys/signalfd.h>
- int signalfd(int fd, const sigset_t *mask, int flags);
参数fd:如果是-1则表示新建一个,如果是一个已经存在的则表示修改signalfd所关联的信号;
参数mask:信号集合;
参数flag:内核版本2.6.27以后支持SFD_NONBLOCK、SFD_CLOEXEC;
成功返回文件描述符,返回的fd支持以下操作:read、select(poll、epoll)、close
timerfd涉及的API
- #include <sys/timerfd.h>
- int timerfd_create(int clockid, int flags);
- int timerfd_settime(int fd, int flags,
- const struct itimerspec *new_value,
- struct itimerspec *old_value);
- int timerfd_gettime(int fd, struct itimerspec *curr_value);
- timerfd_create:创建一个timerfd;返回的fd可以进行如下操作:read、select(poll、epoll)、close
- timerfd_settime:设置timer的周期,以及起始间隔
- timerfd_gettime:获取到期时间。
- 函数参数中数据结构如下:
- struct timespec
- {
- time_t tv_sec; /* Seconds */
- long tv_nsec; /* Nanoseconds */
- };
- struct itimerspec
- {
- struct timespec it_interval; /* Interval for periodic timer */
- struct timespec it_value; /* Initial expiration */
- };
eventfd涉及API:
- #include <sys/eventfd.h>
- int eventfd(unsigned int initval, int flags);
创建一个eventfd,这是一个计数器相关的fd,计数器不为零是有可读事件发生,read以后计数器清零,write递增计数器;返回的fd可以进行如下操作:read、write、select(poll、epoll)、close
这是三种新的fd的基本概念,接下来的几篇会通过例子程序来说明各种fd的用法。
linux新的API signalfd、timerfd、eventfd使用说明相关推荐
- linux新的API signalfd、timerfd、eventfd使用说明——eventfd
好久没更新了,今天看一下第三种新的fd:eventfd类似于管道的概念,可以实现线程间的事件通知,所不同的是eventfd的缓冲区大小是sizeof(uint64_t)也就是8字节,它是一个64位的计 ...
- Pipelines - .NET中的新IO API指引(二)
原文:Pipelines - a guided tour of the new IO API in .NET, part 2 作者:marcgravell 在上一章,我们讨论了以往的StreamAPI ...
- Linux 系统下命令 unrar 的中文版使用说明
查看英文版,猛戳<Linux 系统下命令 unrar 的英文版使用说明> $ rar --help用法: rar <命令> -<选项 1> -<选项 N> ...
- 用xinnet新网API实现动态域名
最近发现托管的免费动态IP受政策管制.商业收费策略.技术平台稳定性等等,变得非常不稳定.自己正好是新网代理资质,也有API和自己的域名,便尝试使用自己的方案更新域名.这样家里的服务器就能使用FTP,以 ...
- 利用新浪API实现数据的抓取\微博数据爬取\微博爬虫 1
PS:(本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.由于微博接口更新后限制增大,这个代码已经不能用来爬 ...
- api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
本文实例讲述了PHP通过调用新浪API生成t.cn格式短网址链接的方法.分享给大家供大家参考,具体如下: 新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. A ...
- php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程
php调用新浪短链接API的方法,php调用新浪api 本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: //Sina App_Key def ...
- 210314阶段三VS使用Linux 的sqlite3 API
目录 一.学习的知识点 1.聊天系统框架 2.VS使用Linux sqlite3 API 2.1 在项目->属性-> 链接器->命令行 处添加 -lsqlite3 2.2 在 项目- ...
- Kafka 0.9 新消费者API
kafka诞生之初,它自带一个基于scala的生产者和消费者客户端.但是慢慢的我们认识到这些API有很多限制.比如,消费者有一个"高级"API支持分组和异常控制,但是不支持很多更复 ...
最新文章
- 高职高考难度大吗_成人高考与普通高考区别成人高考和高考的难度一样吗
- npm常用命令:ini他、install、remove及编译运行工程、使用淘宝npm镜像
- xaml_XAML或JavaFx?
- Mysql的undo、redo、bin log分析
- HDFView 3.1.2 在WIN10系统安装后打开出现黑框闪退的解决方法
- java基础学习-(2)堆和栈
- mysql查询无主键的表的方法:
- ubuntu18.04安装unity tweak tool
- mysql5.6 主从 延迟_MySQL5.6升级5.7时,出现主从延迟问题排查过程
- JS组件系列——表格组件神器:bootstrap table(二:父子表和行列调序)
- 09-JS的事件流的概念(重点)
- PHP读取PDF内容方法
- 金蝶K3与百望九赋税控开票软件对接实现半自动开票
- Matlab一维数据的中值滤波与均值滤波函数
- matlab中dzdx,MatConvnet工具箱使用手册翻译理解一
- 游戏开发中的贝塞尔曲线
- Android 相机预览 横屏竖屏 -- 显示
- 安创安全OA——小程序
- SUS系统可用性量表
- 服务器系统可以备份,服务器操作系统可以备份吗
热门文章
- java接口与集合_【总结】Java常用集合接口与集合类
- 计算机硬件基础大纲,计算机硬件基础教学大纲..docx
- Python四大金刚之二:字典
- 文件循环读取_一个案例轻松认识Python文件处理提取文件中的数字
- 八、计数排序及其应用分析
- html地图缩放比例,百度地图之添加控件——比例尺、缩略图、平移缩放
- oracle中xml如何存储过程,oracle存储过程生成xml文件
- springBoot 解决前后端分离项目中跨越请求,同源策略
- keras中的mini-batch gradient descent (转)
- 循序渐进PYTHON3(十三) --4-- DJANGO之CSRF使用