I/O复用函数
select
poll
epoll<Linux的独有的I/O复用>
接下来我们分三次进行介绍I/O复用
poll
poll的原型是
int poll (struct pollfd *fds,int nfds,int timeout);
比起select更加简洁了一些,事件不再由内核在线修改,而是存入系统提供的结构体中,将文件描述符和从内核拷贝而来的改变数据划分开,不需要每次重置poll,比select聪明了一些,以下是struct pollfd的内容
struct pollfd
{ int fd//关注的文件描述符
short events;//fd将会发生什么事情,或者期望看到的事情,写在这里
short revents;//由内核修改,返回此文件描述符发生的事件类型(必须是events指定的关注的事件)
}
ndfs:传入的结构体数组长度,因为此时的*fds会退化为指针,更准确的来说,ndfs的类型是ndfs_t是无类型的long int数据
timeout:等同于select中timeout的效果
由于pollfd的特性,我么能关注的事件类型就更多了,如下图(来自Linux高性能服务器编程)
使用前,在文件一开始加入#define _GNU