在代码中看到这样的语句: pollfd ->events = pollRDNORM; /*无阻塞的读常规数据*/ ............... numready = poll(pollfd, numfds, -1); /*既然是无阻塞的读,那为什么time又是-1,不超时呢?*/ ............... 既然poll函数不会阻塞在read事件上,那这个timeout是否设置为超时,还有什么意义呢? 谢谢!
应用程序的select()系统调用,调用驱动中的poll()方法。 不理解的是在下面的poll()方法实现中,首先调用poll_wait将等待队列添加到wait结构中,接下来是个判断语句 if (dev->rp != dev->wp) mask |= pollIN | pollRDNORM; /* readable */ 只考虑可读情况。如果这个if语句的条件不满足,那么就不会返回可读,也就是返回0。那么在这里怎么实现阻塞的呢?也就是说如果在应用的select()系统中,指定一个等待时间,在...
我的代码如下:
/* polldemo.c*/
#include
学习steven大师的unix network programming ,前面几章的内容都很好理解,什么listen, socket, accept等都很easy理解。 可是到了介绍select , poll函数时候,俺却怎么都不理解了,连为什么要用select, poll这两个函数和这两个函数干么用的俺都没法理解。 大侠们帮俺说说select, poll函数。
proto_ops{}结构在linux\net.h中定义。是对应于socket套接口的操作集。但是我对其中的poll()函数不明白。它在proto_ops{}结构中定义如下: unsigned int (*poll) (struct file *file, struct socket *sock, struct poll_table_struct *wait); 我看了《UNIX网络编程》中对poll函数的介绍: poll 函数 原型: int poll (struct pollfd *fdarray, unsigned long nfds, int timeout ) 第一个参数是指向结构数组第一个元素的指针: s...
第六章 I/O复用:Select和poll函数 在前一章中,我们遇到一个问题就是,客户端阻塞在了从标准输入中读取数据,与此同时,服务器由于某种原因要求关闭连接给客户端发送了一个FIN,而客户端只有从标准输入读到数据返回后才能知道连接已关闭。在这一章中介绍的I/O复用可以很好的解决这个问题。 1.I/O模型 a. Unix下共有五种I/O模型 阻塞I/O 非阻塞I/O I/O复用(select和poll) 信号驱动I/O(SIGIO) 异步I/O(Posix.1的aio_系列...
看书有写到: fds[0].events=pollIN; fds[1].events=pollIN; 这句: while(fds[0].events || fds[0].events) 这句有何意义呢? 都是返回1的吗? 还有一句: if(fds.revents) {} 这句又有何意义呢? 是返回一个如:例pollIN,它代表一个整数? 看了书没搞懂.非常感谢回答.