博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I/O复用----poll
阅读量:5772 次
发布时间:2019-06-18

本文共 2062 字,大约阅读时间需要 6 分钟。

2018-08-01 (星期三)

poll():

#include 
int poll (struct pollfd *fd, unsigned int nfds, int timeout);struct pollfd { int fd; /* 文件描述符 */ short events; /* 所要查看的事件 */ short revents; /* 返回所目击的事件 */};

 

每个pollfd结构可用于指定一个要查看的文件描述符.

events字段:该文件描述符所要查看事件的位掩码.
(位掩码是什么?)
revents字段:该文件描述符所目击事件的位掩码,内核会在返回时设置此字段.events字段中所要求的事件可能会从revents字段返回.有效事件:
   

POLLIN            有数据可供读取    POLLRDNORM        有一般数据可供读取    POLLRDBAND        有优先数据可供读取    POLLPRI            有紧急数据可供读取    POLLOUT            写入操作将不受阻挡    POLLWRNORM        写入一般数据将不受阻挡    POLLWRBAND        写入优先数据将不受到阻挡    POLLMSG            有SIGPOLL消息可用

 

此外,revents字段可能会返回下列事件:

POLLER            所指定的文件描述符发生错误    POLLHUP            所指定的文件描述符发生过去事件    POLLNVAL        所指定的文件描述符无效

POLLIN | POLLPRI(有数据,有紧急数据可供读取)等效于select()的读取事件
POLLOUT | POLLWRBAND(有数据,有紧急数据可供写入)等效于select()的写入事件.
POLLIN(有数据可供读取) 等效于 POLLRDNORM | POLLRDBAND(有一半数据或优先数据可供读取)
POLLOUT(写入操作不受阻挡) 等效于POLLWRNORM(写入一般数据不受阻挡)
timeout参数用来指定等不到就绪IO也要返回的事件.若值为-1,表示无限等待.
返回值与错误代码
执行成功时,poll()会返回有目击事件的文件描述符(也就是其结构具有非零的revents字段)的数目;如果在有任何事件在发生之前此调用因逾时而返回,则会返回0,整形失败会返回-1,并将errno设定为下面的其中一个值.
   

EBADF            在一个过多个结构中指定了无效的文件描述符    EFAULT            指向fds的指针指向了进程地址空间以外的地方    EINVAL            nfds参数设定超过了RLIMIT_NOFILE的限制    ENOMEM内存怒不足以完成这项要求

 

#include 
#include
#include
#define TIMEOUT 5 /* poll 的等待时间,以秒为单位 */int main(void) { struct pollfd fds[2]; int ret; /* 查看stdin的输入 */ fds[0].fd = STDIN_FILENO; fds[0].events = POLLIN; /* 查看stdout是否可供写入(通常可以) */ fds[1].fd = STDOUT_FILENO; fds[1].events = POLLOUT; /* 都设定好了,开始提供服务! */ ret = poll (fds, 2, TIMEOUT * 100); if (ret == -1) { perror ("poll"); return 1; } if (!ret) { printf ("%d seconds elapsed.\n", TIMEOUT); return 0; } if (fds[0].revents & POLLIN) { printf ("stdin is readable\n"); } if (fds[1].revents & POLLOUT) { printf("stdout is writable\n"); } return 0;}

 

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/9404748.html

你可能感兴趣的文章
Node.js 2017企业用户调查结果发布
查看>>
“软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
查看>>
JAVA的优势就是劣势啊!
查看>>
ELK实战之logstash部署及基本语法
查看>>
帧中继环境下ospf的使用(点到点模式)
查看>>
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
springmvc+swagger2
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
cacti集成
查看>>
Android中的Cursor
查看>>
我的友情链接
查看>>
Java Web Application 自架构 一 注解化配置
查看>>
如何 debug Proxy.pac文件
查看>>
Python 学习笔记 - 面向对象(特殊成员)
查看>>
Kubernetes 1.11 手动安装并启用ipvs
查看>>
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>