用户态与内核态的事件通知 -- eventfd

2015-06-23 17:09:32   最后更新: 2015-06-23 17:09:32   访问数量:1349




阅读 nginx 源码接触到了一个新的系统调用 -- eventfd

eventfd 系统调用是 linux 2.6 以上版本用来在用户空间创建可以用来作为事件等待、通知的文件描述符

简单地说,就是可以在用户态应用中建立一个内核态到用户态的通知机制,这在异步 IO 的使用中非常有用

但是该调用必须工作在 64 位环境下

 

int eventfd(unsigned int intval, int flag);

 

定义于 sys/eventfd.h 中

调用成功返回文件描述符,调用失败,返回 -1

 

通过按位或运算可以使用以下一个或多个标识:

eventfd 系统调用 flag 参数取值
取值说明
EFD_CLOEXEC类似于 open 系统调用的 O_CLOEXEC 标识,一旦 exec 执行后,关闭所有 fd
EFD_NONBLOCK非阻塞调用
EFD_SEMAPHORE以信号方式处理文件描述符,linux 2.6.26 以上版本将不支持

 

关于该系统调用的实际用法,可以参看 nginx 中的相应代码

 






技术帖      linux      unix      文件描述符      技术分享      系统调用      fd      事件      eventfd      用户态      内核态      event      非阻塞     


京ICP备15018585号