I/O复用中poll的系统调用
#include<poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
(1)fds参数是一个pollfd结构类型的数组,它指定所有我们感兴趣的文件描述符上发生的可读、可写和异常事件。pollfd的结构体定义如下:
struct pollfd
{
int fd; //文件描述符
short events; //注册的事件
short revents; //实际发生的事件,由内核填充
};
其中,fd成员指定文件描述;events成员告诉poll监听fd上的那些事件,它是一系列事件的按位或;revents成员则由内核修改,已通知应用程序fd上实际发生了哪些事件。poll支持的事件类型如表所示:
POLLIN 数据(包括普通数据和优先数据)可读
POLLRDHUP TCP连接被对方关闭,或者对方关闭了写操作,它由GNU引入
POLLOUT 数据(包括普通数据和优先数据)可写
其中,这三个事件最为常用,所以我将其写在这里,其他我不在赘述,直接上图,需要者自取。