目录
一、函数原语
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
二、结构体
typedef union epoll_data {
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;
struct epoll_event {
__uint32_t events; /* Epoll events */
epoll_data_t data; /* User data variable */
};
三、二种模式
ET:边沿触发,我的理解就是当epoll_wait检测到有数据来时,就会返回,如果用户没有将数据读完,再次循环到epoll_wait函数处将不再返回,这就是边沿的含义
LT:水平触发就是只要可读就会返回,不是根据变化来触发的,所以没有读完但是只要可读epoll_wait都会返回。
根据以上特点所以ET模式时应该将文件描述符设置成非阻塞,当read函数返回EAGAIN的时候就知道彻底读完了,写也是一样的道理。
四、简单例子