Epoll API
epoll
1、epoll_create()
创建一个新的epoll实例。在内核中创建了一个数据,包含:需要检测的文件描述符的信息(红黑树)+ 就绪列表,存放检测到数据发送改变的文件描述符信息(双向链表)。
原型:int epoll_create(int size)
参数:
size : 目前没有意义了。随便写一个数,必须大于0
返回值:
-1 : 失败; > 0 : 操作epoll实例的文件描述符
1 | int epfd = epoll_create(100); |
2、epoll_ctl()
对epoll实例进行管理:添加一个文件描述符信息,删除一个文件描述符信息,修改一个文件描述符信息
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
参数:
- epfd : 操作epoll实例的文件描述符
- op : 要进行什么操作
- EPOLL_CTL_ADD: 添加
- EPOLL_CTL_MOD: 修改
- EPOLL_CTL_DEL: 删除
- fd : 要检测的文件描述符
1 | typedef union epoll_data { |
3、epoll_wait()
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
参数:
- epfd : 操作epoll实例的文件描述符
- events : 传出参数,保存发生了变化的文件描述符的信息
- maxevents : 第二个参数结构体数组的大小
- timeout : 阻塞时间
0 : 不阻塞
1 : 阻塞,直到检测到fd数据发生变化,解除阻塞
>0:阻塞的时长(毫秒)
- 返回值:成功,返回发送变化的文件描述符的个数 > 0;失败 -1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lavinia的学习记录!
