[转] linux新的API signalfd、timerfd、eventfd使用说明

http://blog.csdn.net/gdutliuyun827/article/details/8460417

三种新的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的用法。

时间: 2024-10-10 11:12:55

[转] linux新的API signalfd、timerfd、eventfd使用说明的相关文章

5.hadoop流原理、实例和新旧API下Wordcount详解

前四篇文章讲了Hadoop的配置和测试以及eclipse下的使用,有兴趣的可以先看下. 1.Hadoop流简介 用可执行文件作为Mapper和Reducer,接受的都是标准输入,输出的都是标准输出. 当一个可执行文件作为Mapper时,每一个Map任务会以一个独立的进程启动这个可执行文件,然后在Map任务运行时,会把输入切分成行提供给可 执行文件,并作为它的标准输入(stdin)内容.当可执行文件运行出结果时,Map从标准输出(stdout)中收集数据,并将其转化 为<key, value>对

CloudStack添加新的API注意事项

1.***Cmd上面的@APICommand里的responseObject关联对于的Response: 2.在tomcatconf/command.properties.in添加新API的权限: 3.为得到Cmd,都需要实现PluggableService接口的getCommands()方法,核心Cmd都需在ManagementServerImpl类的getComands()方法里将新添加的***Cmd类添加到cmList中. CloudStack添加新的API注意事项,码迷,mamicode

Windows 和 Linux 的IPC API对应表

原文出处:http://blog.csdn.net/zhengdy/article/details/5485472                                              Windows 和 Linux 的IPC API对应表 Table 1. Process mapping Windows Linux Classification CreateProcess() CreateProcessAsUser() fork() setuid() exec() Mapp

Hadoop日记Day15---MapReduce新旧api的比较

我使用hadoop的是hadoop1.1.2,而很多公司也在使用hadoop0.2x版本,因此市面上的hadoop资料版本不一,为了扩充自己的知识面,MapReduce的新旧api进行了比较研究. hadoop版本1.x的包一般是mapreduce hadoop版本0.x的包一般是mapred 我们还是以单词统计为例进行研究,代码如下,如代码1.1所示: package old; import java.io.IOException; import java.net.URI; import ja

Linux与Windows API对比

对象 操作 Linux API Windows API 线程 创建 pthread_create() CreateThread() 退出 pthread_exit() ThreadExit() 等待 pthread_join() WaitForSingleObject() 互斥锁 创建 pthread_mutex_init() CreateMutex() 销毁 pthread_mutex_destroy() CloseHandle() 加锁 pthread_mutex_lock() WaitFo

【php】利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地

本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地>(点击打开链接)为姊妹篇,只是后端编程语言换成了php. 做出同样的效果,打开页面,得到客户端的ip,并获取利用新浪api接口获取此ip的归属地. 可以看到,在IE6也是相当正常的. 目录结构如下,非常简单,同样就两个文件,其实如果你愿意,写成一个php文件也可以,但是显示层和逻辑业务层还是不混在一起为好吧? 唯一值得注意的是,这两个文件打死也不能一个叫ipGet.php,ipGet.html

Python如何调用新浪api接口的问题

前言:这些天在研究如何调用新浪开放平台的api分析新浪微博用户的数据 成果:成功调用了新浪api获取了用户的一些个人信息和无数条公共微博 不足:新浪开放平台访问有限制,返回的数据着实有限,不足以分析问题,真的要分析问题还是得个人写爬虫 下面是调用新浪开放api的过程: 第一步:按这个做就行 http://www.cnblogs.com/dhsunny/p/3578399.html?utm_source=tuicool&utm_medium=referral 其中有一不那个新浪api测试工具是打不

我的 Linux 新世界观 (转)

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} 我的 Linux 新世界观 (转) Table of Contents 关于工具的哲学 自由软件好,还是开源软件好? Linux 桌面,永远的痛? Linux 擅长什么? 十年河东,十年河西,何时宛在水中央? 是工具决定目的,还是目的决定工具? 为什么是 Linux,而不是别的? 原文: h

新图形API为unity5 带来了什么&amp;下一代新图形API的好处

西瓜的演讲 ppt翻译+解释+其他: wolf96 在最基本的层面上,这些新api是为了改进CPU性能和效率,通过: 减少CPU渲染瓶颈的情况, 提供更多可预测和稳定的驱动的行为, 给应用程序更多控制,就像在控制台开发一样 在传统的api,通常只有单个CPU线程提交GPU的工作.当试图渲染一个极其复杂的场景时,可能成为一个瓶颈. 因此,大多数应用程序尝试在"渲染线程"做尽可能少的事情,和驱动多线程也可以分担一点,但可伸缩性当然是有限的. 相比之下,我们会发现这些新的api,而不是处理这