I/O复用——poll系统调用
来源:互联网 发布:聊天软件默默 编辑:程序博客网 时间:2024/06/06 16:57
poll系统调用
poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪的文件描述符。
在终端输入man poll可查看poll函数的原型:
#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);
1)fds参数是一个pollfd结构类型的数组,它指定所有我们感兴趣的文件描述符上发生的可读、可写和异常事件。pollfd结构体的定义如下:
struct pollfd { int fd; /* file descriptor (文件描述符) */ short events; /* requested events (注册的事件) */ short revents; /* returned events (实际发生的事件,由内核填充) */};
其中,fd成员指定文件描述符;events成员告诉poll监听fd上的哪些事件,它是一系列事件的按位或;revents成员则由内核修改,以通知应用程序fd上实际发生了哪些事件。
poll支持的事件类型如下表所示:
上表中,POLLRDNORM、POLLRDBAND、POLLWRNORM、POLLWRBAND由XOPEN规范定义。它们实际上是将POLLIN事件和POLLOUT事件分得更细致,以区别对待普通数据和优先数据。但Linux并不完全支持它们。
通常,应用程序需要根据recv调用的返回值来区分socket上接收到的是有效数据还是对方关闭连接的请求,并做相应的处理。不过,自Linux内核2.6.17开始,GNU为poll系统调用增加了一个POLLRDHUP事件,它在socket上接收到对方关闭连接的请求之后触发。这为我们区分上述两种情况提供了一种更简单的方式。但使用POLLRDHUP事件时,我们需要在代码最开始处定义_GNU_SOURCE。
2)nfds参数指定被监听事件集合fds的大小。其类型nfds_t的定义如下:
typedef unsigned long int nfds_t;
3)timeout参数指定poll的超时值,单位是毫秒。当timeout为-1时,poll调用将永远阻塞,直到某个事件发生;当timeout为0时,poll调用将立即返回。
poll系统调用的返回值含义与select相同。
- I/O复用——poll系统调用
- I/O复用-poll系统调用
- I/O多路复用之POLL系统调用
- I/O复用之poll系统调用
- I/O复用系统调用之select()和poll()
- I/O复用的系统调用select、poll、epoll
- I/O复用poll
- I/O复用------poll
- I/O复用——poll(二)
- I/O复用——select与poll
- I/O多路复用——poll
- I/O多路复用—poll服务器
- I/O复用——select系统调用
- I/O复用——select系统调用
- I/O复用——epoll系列系统调用
- Linux I/O复用——select系统调用
- Linux系统编程——I/O多路复用select、poll、epoll的区别使用
- Linux系统编程——I/O多路复用select、poll、epoll的区别使用
- Android问题解决途径
- GCD 实现同步锁
- android 自定义选项卡tabhoust
- 关于二叉树的遍历
- Java网络编程精解笔记1:入门
- I/O复用——poll系统调用
- Java基础:Day10笔记内容 (多态概述、抽象类)
- sql server查询技巧
- excel工作量清单计算开始、结束时间,自动跳过节假日
- iOS之XCode在Interface Builder通过16进制选择选择颜色
- 二十岁出头的时候上,你一无所有,你拥有一切。
- jvm频繁GC问题查找记录
- Android Studio 模拟器无法启动问题(x86 emulation currently requires hardware acceleration。。。)
- HDOJ 最短路