eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 。
- 原型
#include <sys/eventfd.h>
int eventfd(unsigned int initval, int flags);
efd = eventfd(0, 0);
if (efd == -1)
handle_error("eventfd");
-
作用
- eventfd顾名思义就是事件fd类型,就是专门用于事件同志的文件描述符(fd)
- eventfd 是一个计数相关的fd,计数不为零是有可读事件发生 write 仅仅是加计数,read 是读计数,并且清零
-
eventfd 结合epoll
eventfd 是专门用来传递事件的 fd ,而 epoll 池则是专门用来管理事件的池子,它们两结合就妙了
eventfd 可以和 libaio & epoll 一起,实现 Linux 下的纯异步 IO
ext4 这种文件 fd 一直可读可写,所以实现 poll 毫无意义。eventfd 一直可写,所以监听可写毫无意义;
eventfd 可以结合业务,做一个事件通知的通信机制,非常巧妙;