#include
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
struct pollfd *fds:是一个数组,将所有需要监听的文件描述符以及事件类型放在数组中,交给poll
struct pollfd {
int fd; //需要被poll监听的文件描述符
short events; //关注该文件描述付上感兴趣的事件类型:POLLIN POLLOUT POLLERR
short revents; //这个值是poll函数返回时poll去填写的,即该文件描述符上有什么样的类型的产生,同样是POLLIN POLLOUT POLLERR
};
使用示例:
struct pollfd fds[2000];
fds[0].fd = 4;
fds[0].events = POLLIN;
fds[1].fd = 5;
fds[1].events = POLLOUT;
fds[1].fd = 5;
fds[1].events = POLLIN;
int ready = poll(fds,3,-1);
if(ready == 0){
//
}else if(ready > 0){
//
}else{
//
}
nfds_t nfds:需要监听的文件描述符的个数,不是数组的长度
int timeout:超时时间,等待多久
poll 和 epoll在一些操作系统上是不支持的,比如公司使用的QNX实时系统就不支持,但是select出来的比较早,QNX就能支持,跨平台的话可以考虑select.