poll函数类似于select,但是程序接口有所不同。poll函数可用于任何类型的文件描述符。
#include <poll.h> int poll(struct pollfd fdarray[ ], nfds_t nfds, int timeout); 返回值:准备就绪的描述符数目;若超时,返回0;若出错,返回-1 |
---|
poll构造了一个pollfd结构的数组,每个数组元素制定了一个描述符编号以及我们对该描述符感兴趣的条件。
struct pollfd {
int fd; / * file descriptor * /
short events; / * requested events * /
short revents; / * returned events * /
};
nfds为fdarray数组中的元素数目。
应将每个数组元素的events成员设置为下图中所示值的一个或几个,通过这些值告诉内核我们关心的是每个描述符的哪些事件。poll函数并没有和select一样更改events成员。
下图中前4行测试的是可读性,接下来的3行测试的可写性,最后3行测试的异常条件。
poll的最后一个参数指定的是愿意等待多长时间。具体用法与select相同。