三种新的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:
[cpp] view plaincopy
  1. #include <sys/signalfd.h>
  2. 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
[cpp] view plaincopy
  1. #include <sys/timerfd.h>
  2. int timerfd_create(int clockid, int flags);
  3. int timerfd_settime(int fd, int flags,
  4. const struct itimerspec *new_value,
  5. struct itimerspec *old_value);
  6. int timerfd_gettime(int fd, struct itimerspec *curr_value);
[cpp] view plaincopy
  1. timerfd_create:创建一个timerfd;返回的fd可以进行如下操作:read、select(poll、epoll)、close
  2. timerfd_settime:设置timer的周期,以及起始间隔
  3. timerfd_gettime:获取到期时间。
[cpp] view plaincopy
  1. 函数参数中数据结构如下:
  2. struct timespec
  3. {
  4. time_t tv_sec;                /* Seconds */
  5. long   tv_nsec;               /* Nanoseconds */
  6. };
  7. struct itimerspec
  8. {
  9. struct timespec it_interval;  /* Interval for periodic timer */
  10. struct timespec it_value;     /* Initial expiration */
  11. };
eventfd涉及API:
[cpp] view plaincopy
  1. #include <sys/eventfd.h>
  2. 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使用说明相关推荐

  1. linux新的API signalfd、timerfd、eventfd使用说明——eventfd

    好久没更新了,今天看一下第三种新的fd:eventfd类似于管道的概念,可以实现线程间的事件通知,所不同的是eventfd的缓冲区大小是sizeof(uint64_t)也就是8字节,它是一个64位的计 ...

  2. Pipelines - .NET中的新IO API指引(二)

    原文:Pipelines - a guided tour of the new IO API in .NET, part 2 作者:marcgravell 在上一章,我们讨论了以往的StreamAPI ...

  3. Linux 系统下命令 unrar 的中文版使用说明

    查看英文版,猛戳<Linux 系统下命令 unrar 的英文版使用说明> $ rar --help用法: rar <命令> -<选项 1> -<选项 N> ...

  4. 用xinnet新网API实现动态域名

    最近发现托管的免费动态IP受政策管制.商业收费策略.技术平台稳定性等等,变得非常不稳定.自己正好是新网代理资质,也有API和自己的域名,便尝试使用自己的方案更新域名.这样家里的服务器就能使用FTP,以 ...

  5. 利用新浪API实现数据的抓取\微博数据爬取\微博爬虫 1

    PS:(本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.由于微博接口更新后限制增大,这个代码已经不能用来爬 ...

  6. api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解

    本文实例讲述了PHP通过调用新浪API生成t.cn格式短网址链接的方法.分享给大家供大家参考,具体如下: 新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. A ...

  7. php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程

    php调用新浪短链接API的方法,php调用新浪api 本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: //Sina App_Key def ...

  8. 210314阶段三VS使用Linux 的sqlite3 API

    目录 一.学习的知识点 1.聊天系统框架 2.VS使用Linux sqlite3 API 2.1 在项目->属性-> 链接器->命令行 处添加 -lsqlite3 2.2 在 项目- ...

  9. Kafka 0.9 新消费者API

    kafka诞生之初,它自带一个基于scala的生产者和消费者客户端.但是慢慢的我们认识到这些API有很多限制.比如,消费者有一个"高级"API支持分组和异常控制,但是不支持很多更复 ...

最新文章

  1. 高职高考难度大吗_成人高考与普通高考区别成人高考和高考的难度一样吗
  2. npm常用命令:ini他、install、remove及编译运行工程、使用淘宝npm镜像
  3. xaml_XAML或JavaFx?
  4. Mysql的undo、redo、bin log分析
  5. HDFView 3.1.2 在WIN10系统安装后打开出现黑框闪退的解决方法
  6. java基础学习-(2)堆和栈
  7. mysql查询无主键的表的方法:
  8. ubuntu18.04安装unity tweak tool
  9. mysql5.6 主从 延迟_MySQL5.6升级5.7时,出现主从延迟问题排查过程
  10. JS组件系列——表格组件神器:bootstrap table(二:父子表和行列调序)
  11. 09-JS的事件流的概念(重点)
  12. PHP读取PDF内容方法
  13. 金蝶K3与百望九赋税控开票软件对接实现半自动开票
  14. Matlab一维数据的中值滤波与均值滤波函数
  15. matlab中dzdx,MatConvnet工具箱使用手册翻译理解一
  16. 游戏开发中的贝塞尔曲线
  17. Android 相机预览 横屏竖屏 -- 显示
  18. 安创安全OA——小程序
  19. SUS系统可用性量表
  20. 服务器系统可以备份,服务器操作系统可以备份吗

热门文章

  1. java接口与集合_【总结】Java常用集合接口与集合类
  2. 计算机硬件基础大纲,计算机硬件基础教学大纲..docx
  3. Python四大金刚之二:字典
  4. 文件循环读取_一个案例轻松认识Python文件处理提取文件中的数字
  5. 八、计数排序及其应用分析
  6. html地图缩放比例,百度地图之添加控件——比例尺、缩略图、平移缩放
  7. oracle中xml如何存储过程,oracle存储过程生成xml文件
  8. springBoot 解决前后端分离项目中跨越请求,同源策略
  9. keras中的mini-batch gradient descent (转)
  10. 循序渐进PYTHON3(十三) --4-- DJANGO之CSRF使用