I/O复用三 : epoll

2017-09-11  本文已影响0人  wayyyy
epoll_create
#include <sys/epoll.h> 

int epoll_create(int size);

- 返回值:
  success:返回一个非0 的未使用过的最小的文件描述符
  error:-1 errno被设置

创建一个epoll实例,返回一个指向该实例的文件描述符,size用来告诉内核这个监听的数目一共有多大。

需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下查看/proc/进程id/fd/,是能够看到这个fd的( eg: ls /proc/$(ps -aux | grep './main' | awk 'NR==1 { print $2 }')/fd ),所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。

epoll_ctl
#include <sys/epoll.h> 

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

epoll的事件注册函数

epoll_wait
#include <sys/epoll.h> 

int epoll_wait(int epfd, struct epoll_event *event, int maxevents, int timeout);

等待事件的产生。

工作模式

epoll对文件描述符的操作有2种模式:LT和ET。

当使用LT模式时:

LT.jpg

当使用ET模式时:

ET.jpg

参考资料
[1]《UNIX 网络编程》3th [美] W.Richard Stevens,Bill Fenner,Andrew M. Rudoff
[2] http://www.cnblogs.com/ajianbeyourself/p/5859989.html
[3] https://blog.csdn.net/hnlyyk/article/details/50946194

上一篇 下一篇

猜你喜欢

热点阅读