欢迎来到天天文库
浏览记录
ID:34724180
大小:70.68 KB
页数:8页
时间:2019-03-10
《linux2.6内核epoll用法举例说明》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、epoll是linux2.6加入的用于I/O事件多路分离的一组函数,这组函数简化了反应式socket服务器的编程,并且很大程度提高了性能。从一定程度上弥补了LINUX内核对异步I/O支持的不足,epoll机制加上非阻塞I/0可以模拟实现异步I/O。本文主要是说明如何使用epoll机制来编写一个echo服务器。epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:所用到的数据结构typedefunionepoll_data{void*ptr;intfd;__uint32_tu32;__uint64_tu64;}epoll_data_t;s
2、tructepoll_event{__uint32_tevents;/*Epollevents*/epoll_data_tdata;/*Userdatavariable*/};结构体epoll_event被用于注册所感兴趣的事件和回传所发生待处理的事件,其中epoll_data联合体用来保存触发事件的某个文件描述符相关的数据,例如一个client连接到服务器,服务器通过调用accept函数可以得到于这个client对应的socket文件描述符,可以把这文件描述符赋给epoll_data的fd字段以便后面的读写操作在这个文件描述符上进行。epoll_event结构体的events字段是表
3、示感兴趣的事件和被触发的事件可能的取值为:EPOLLIN:表示对应的文件描述符可以读;EPOLLOUT:表示对应的文件描述符可以写;EPOLLPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);EPOLLERR:表示对应的文件描述符发生错误;EPOLLHUP:表示对应的文件描述符被挂断;EPOLLET:表示对应的文件描述符有事件发生;所用到的函数:1、epoll_create函数函数声明:intepoll_create(intsize)该函数生成一个epoll专用的文件描述符,其中的参数是指定生成描述符的最大范围(我觉得这个参数和select函数的第一个参数应该
4、是类似的但是该怎么设置才好,我也不太清楚)。2、epoll_ctl函数函数声明:intepoll_ctl(intepfd,intop,intfd,structepoll_event*event)该函数用于控制某个文件描述符上的事件,可以注册事件,修改事件,删除事件。参数:epfd:由epoll_create生成的epoll专用的文件描述符;op:要进行的操作例如注册事件,可能的取值EPOLL_CTL_ADD注册、EPOLL_CTL_MOD修改、EPOLL_CTL_DEL删除fd:关联的文件描述符;event:指向epoll_event的指针;如果调用成功返回0,不成功返回-13、epo
5、ll_wait函数函数声明:intepoll_wait(intepfd,structepoll_event*events,intmaxevents,inttimeout)该函数用于轮询I/O事件的发生;参数:epfd:由epoll_create生成的epoll专用的文件描述符;epoll_event:用于回传代处理事件的数组;maxevents:每次能处理的事件数;timeout:等待I/O事件发生的超时值;返回发生事件数。例子:6、h>#include<iostream>7、="">#include<sys/socket.h
6、h>#include
7、="">#include<sys/socket.h
此文档下载收益归作者所有