1. int epoll_create(int size); linux
epoll_create 新建了一个epoll的实例,请求内核分配一块存储事件结构的空间,size不是后台存储的最大尺寸,只是初始化时告诉内核应该分配多大的内部空间。 socket
epoll_create 返回了一个对新的epoll实例引用的文件描述符。这个文件描述符在全部随后的epoll接口的调用中都会被用到。当不须要的时候,由epoll_create返回的文件描述符,须要用close()函数关闭。当全部对本文件应用的文件描述符都被关闭时,内核将把这个epoll实例破坏掉,并释放所分配的资源以实现再利用。 函数
2 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) ui
这个系统调用控制了一个被文件描述符epfd所引用的epoll实例。它在目标文件描述符fd上请求相关的操做op。 对象
有效的op参数以下: 接口
EPOLL_CTL_ADD 在文件描述符epfd所引用的epoll实例里注册目标文件描述符fd并把event和fd指向的文件联系起来。 事件
EPOLL_CTL_MOD 资源
修改和目标文件描述符fd联系起来的event。 it
EPOLL_CTL_DEL io
移除由epfd引用的epoll实例中目标文件描述符fd。
event这个参数描述了链接fd的对象。struct epoll_event是这样定义的:
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*/
}
成员变量events有一下几种类型:
EPOLLIN:
相关的文件对read可用。
EPOLLOUT:
相关的文件对write可用。
EPOLLRDHUP(自版本linux 2.6.17)
socket流结束链接,或者在链接中途中断。(这个标记在使用边缘触发模式ET时查探远端关闭)
EPOLLPRI read操做紧急数据可用
EPOLLERR 相关联的文件描述符出错。epoll_wait无论有没有在events设置它,这个事件永远被epoll_wait关注。
EPOLLHUP 相关联的文件描述符被挂断。epoll_wait不会忽略这个事件,无论events中有没有设置它。
EPOLLET 把相关联的文件描述符设置成边缘触发方式。默认的是水平触发方式。
EPOLLONESHOT (自linux 2.6.2)
把相关联的文件描述符设置单目标