玩下linux中的的poll函数------可以用任何描述符号fd而不限于网络socket
来源:互联网 发布:儿童 编程培训 编辑:程序博客网 时间:2024/04/30 23:23
前面我们玩了linux中的select函数, 今天我们来介绍一个与之类似的函数, 作用就是做轮询检测, 建议先看select, 再看poll. 至于函数原型和返回值, 就没有必要单独说了, 网上一搜一大堆。
直接上菜:
#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netdb.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <errno.h>#include <malloc.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <stdarg.h>#include <fcntl.h>#include <fcntl.h> #include <sys/poll.h> #if 0struct pollfd{int fd; //文件描述符short events; //请求的事件short revents; //返回的事件};#endifint main() {pollfd fds[10];fds[0].fd = STDIN_FILENO; // 标准输入描述符fds[0].events = POLLIN; // 检测读int nfds = 1; // 待监听的描述符的个数int timeoutMS = 5000; // 毫秒int iRet = poll(fds, nfds, timeoutMS); // 如果有描述集对应的事件发生,则触发立即返回, 否则就是超时返回if (iRet < 0){ printf("iRet is %d\n", iRet);return -1;}if (0 == iRet){ printf("time out\n");return -2;}char szBuf[1024] = {0};if (fds[0].revents & POLLIN) {read(STDIN_FILENO, szBuf, sizeof(szBuf) - 1); // 读取终端输入 }printf("str is [%s], strlen is %d\n", szBuf, strlen(szBuf)); return 0; }
编译并运行, 然后别动, 5s后, 结果是: time out
编译并运行, 然后再5s内输入abc, 结果是:
abc
str is [abc
], strlen is 4
为什么在abc后换行了呢, 因为读取了enter的缘故。
可见, poll和select大同小异, 可以对比理解。
阅读全文
1 0
- 玩下linux中的的poll函数------可以用任何描述符号fd而不限于网络socket
- 再玩下linux中的的epoll函数------可以用任何描述符号fd而不限于网络socket
- 再次一起来玩linux select函数------可以用任何描述符号fd而不限于网络socket
- linux内核中的文件描述符(三)--fd的回收
- 浅谈 Linux 下的文件描述符 fd fp
- Linux网络通信中的poll函数应用
- linux下的poll函数
- Linux网络编程之socket:select函数的并发限制与poll函数
- Linux网络编程之socket:epoll系列函数简介,与select,poll函数的区别
- Linux中的Socket编程(不限Linux)
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- Linux fd文件描述符的本来面目
- c++/c socket应用的区别:socket()函数返回文件描述符fd总是0的问题
- linux下pipe,poll函数的学习
- Java创建WebService服务端
- 数据挖掘与预测分析------数据预处理
- POJ 2312 Battle City 笔记
- 第十七章 再论"没有银弹"
- MapReduce工作原理
- 玩下linux中的的poll函数------可以用任何描述符号fd而不限于网络socket
- HDU 1027 Ignatius and the Princess II(全排列)
- AOJ-problem-09
- Iphone 消息通知(APNS)的3种方式 -- C# 和 nodejs
- kubeadm 安装kubetnetes(flannel)
- html 标签与元素
- UVA 572 POJ 2386 连通块问题
- 多进程共享内存续篇-大锁
- 【修真院“纯洁”系列之十九】驱逐令