一句话总结:用于进程/线程间通信,效率比pipe高
#include <sys/eventfd.h>
int eventfd(unsigned int initval, int flags);
常用的进程(线程)间通信机制有管道、信号量、消息队列、信号、共享内存、socket等等,其中主要作为进程(线程)间通知/等待的有管道pipe和socket。从Linux 2.6.27版本开始增加了eventfd,主要用于进程或者线程间的通信(如通知/等待机制的实现)。
eventfd()创建了一个"eventfd object",能在用户态用做事件wait/notify机制,通过内核取唤醒用户态的事件。这个对象保存了一个内核维护的uint64_t类型的整型counter,这个counter初始值被参数initval指定,在Linux 2.6.26之前flags参数是没用的,必须指定为0。
initial:初始值
flags:
EFD_CLOEXEC: 调用exec后关闭
EFD_NONBLOCK:非阻塞模式
实例:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#incl