I/O复用----poll
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 ;
}
I/O复用----poll的更多相关文章
- IO复用——poll系统调用
1.poll函数 #include<poll.h> int poll(struct pollfd* fds, nfds_t ndfs, int timeout) poll函数在一定的时间内 ...
- I/O复用 poll简介
1.基本概念 poll起源于SVR3,开始时局限于流设备,在SVR4时取消了此限制,允许poll工作在任何描述符上,但涉及到流设备时,它还提供了附加信息. poll的机制与select类似,与sele ...
- 高级IO复用应用:聊天室程序
简单的聊天室程序:客户端从标准输入输入数据后发送给服务端,服务端将用户发送来的数据转发给其它用户.这里采用IO复用poll技术.客户端采用了splice零拷贝.服务端采用了空间换时间(分配超大的用户数 ...
- 网络编程-I/O复用
I/O模型 Unix下可用的I/O模型有五种: 阻塞式I/O 非阻塞式I/O I/O复用(select和poll.epoll) 信号驱动式I/O(SIGIO) 异步I/O(POSIX的aio_系列函数 ...
- 关于OPEN_MAX宏undeclared的问题
最近在看unp时,I/O复用-poll一章的代码使用到了OPEN_MAX.据书中描述,这一宏定义在limits.h头文件中,指代一个进程在任意时刻能打开的最大描述符数目.但在代码编译时遇到了错误,提示 ...
- select、poll、epoll三组IO复用
int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,struct timeval* timeout)//其中n ...
- I/O复用中的 select poll 和 epoll
I/O复用中的 select poll 和 epoll: 这里有一些不错的资料: I/O多路复用技术之select模型: http://blog.csdn.net/nk_test/article/de ...
- 【unix网络编程第三版】阅读笔记(五):I/O复用:select和poll函数
本博文主要针对UNP一书中的第六章内容来聊聊I/O复用技术以及其在网络编程中的实现 1. I/O复用技术 I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程.I/O ...
- UNIX网络编程——I/O复用:select和poll函数
我们看到TCP客户同时处理两个输入:标准输入和TCP套接字.我们遇到的问题是就在客户阻塞于(标准输入上)fgets调用,服务器进程会被杀死.服务器TCP虽然正确的给客户TCP发送了一个FIN,但是既然 ...
随机推荐
- Linux怎样创建FTP服务器--修改用户默认目录-完美解决 - 费元星
在创建FTP服务器之有先命令: ps -ef |grep vsftpd 查一下系统有没有安装vsftpd这个服务器,如果出现如下图所示的界面说明没有安装. 然后再执行:yum install vs ...
- C#中创建二维数组,使用[][]和[,]的区别
C#中,我们在创建二维数组的时候,一般使用arr[][]的形式,例如 int[][] aInt = new int[2][]; 但声明二维数组还有一种方法,是使用arr[,]的形式.两者有什么区别呢? ...
- hdu1159Common Subsequence(动态规划)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- liunx环境下安装禅道
环境: vm12.5.2 CentOS-7-x86_64 ZenTaoPMS.9.1.stable.zbox_64 SecureCRT 8.0 因为liunx环境下配置apache, php, mys ...
- Python数学运算入门把Python当作计算器
让我们尝试一些简单的 Python 命令.启动解释器,等待界面中的提示符,>>> (这应该花不了多少时间). 3.1.1. 数字 解释器就像一个简单的计算器一样:你可以在里面输入一个 ...
- lintcode50 数组剔除元素后的乘积
数组剔除元素后的乘积 给定一个整数数组A. 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法. 您在真实的面试中是 ...
- 凸包算法(Graham扫描法)详解
先说下基础知识,不然不好理解后面的东西 两向量的X乘p1(x1,y1),p2(x2,y2) p1Xp2如果小于零则说明 p1在p2的逆时针方向 如果大于零则说明 p1在p2的顺时针方向 struct ...
- JS验证验证服务器控件
JS验证验证服务器控件 <script language="javascript" type="text/javascript"> /******* ...
- Kali渗透测试工具-nslookup
1.交互模式 终端输入nslookup进入交互模式 (1)查询A地址记录(默认) set q=a A记录简单理解将域名转换成对应的IP地址 (2)查询mail exchanger set q=mx m ...
- POJ 3084 Panic Room(最大流最小割)
Description You are the lead programmer for the Securitron 9042, the latest and greatest in home sec ...