不同于select使用三个位图来表示三个fdset的方式,poll使用了一个人pollfd的指针来实现。
pollfd结构包含了要监视的event和要发生的event,不在使用select“参数-值”的方式。同时,pollffd并没有最大数量限制(但是数量过大后性能也是会下降)。poll返回后,需要轮询pollfd来获取就绪的描述符。
从上面看,select和poll都需要在返回后,通过遍历文件描述符来获取已经就绪的socket。 事实上,同时连接的大量客户端在同一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。
下边列举示例:使用poll监控输入
结果输出为:
运行程序时,如果不输入,超出timeout设置的时间,就会提示timeout
输入后,程序会从stdin读到输入的内容,回显到屏幕。