poll函数和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列。
外文名poll作 用把当前的文件指针挂到等待队列
函数原型:
#include <poll.h>
int poll(struct pollfd fds[], nfds_t nfds, int timeout);
struct pollfd {
int fd; /*文件描述符*/
short events; /* 等待的需要测试事件 */
short revents; /* 实际发生了的事件,也就是返回结果 */
};
1 参数
参数1:fds数组的首地址
参数2:nfds:nfds_t类型的参数,用于标记数组fds中的结构体元素的总数量
参数3:timeout:是poll函数调用阻塞的时间
2 优点:
实现了监听1024个文件描述符的限制(通过修改配置文件来实现)
这个是用户计算机最多打开的文件描述符上限
在文件尾写入以下配置,soft软限制,hard硬限制
soft nofile 65536
hard nofile 100000
监听 返回集合实现了分离 不是同一个了(每一个监听的对象都变成一个数组)
搜索的范围变小
3 缺点:
效率还是低
4 返回值
满足条件的文件描述符总数
5 实现过程:
struct pollfd fds[500];
fds[0].fd=listenfd;
fds[0].eventts=POLLIN;
fds[1].fd=fd1;
fds[1].events=POLLOUT
fds[2].fd=fd1;
fds[2].events=POLLOUT
poll(fds,5,-1);