2018-08-01 (星期三)
poll():

#include <sys/poll.h>

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

最新文章

  1. bind模拟
  2. SQL 事务回滚
  3. Atitit prj 项目管理与行政管理(1)------项目环境的概览与建立
  4. Ajax 学习 - 基础学习
  5. Unity3d 引擎原理详细介绍
  6. ECMAScript 6 入门学习笔记(持续更新)
  7. PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以这里总结一下。以便用到的出现错误
  8. Dynamic - ExpandoObject学习心得
  9. 关于STM32 RTC的使用
  10. PBOC/EMV 中SDA和DDA简介
  11. 决策树J48算法
  12. 【WCF】错误处理(三):错误协定
  13. zookeeper+dubbo简单使用
  14. Java基础总结--流程控制
  15. (ubuntu)linux C编程之sleep()和usleep()的使用和区别
  16. iOS 可高度自定义的底部弹框
  17. Explicit
  18. 工程部署从tomcat6.0迁移到jboss6.0错误总结
  19. arduino一些内容
  20. POJ 2392

热门文章

  1. netty之心跳机制
  2. Kubernetes 在网易云中的落地优化实践
  3. 理解Python的装饰器
  4. mysql 各种存储引擎的特点
  5. system_Class类说明文档
  6. (转) GEM透视阴影贴图
  7. 【C#】ArcFace2 视频人脸比对教程
  8. 【转载】java byte转十六进制
  9. Calculator 2
  10. MFC动态创建控件及其消息响应函数