博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再玩下linux中的的epoll函数------可以用任何描述符号fd而不限于网络socket
阅读量:4142 次
发布时间:2019-05-25

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

      之前玩过epoll,  再来看下, 其实也很简单:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define NUM 1#define MAX 100int main() { epoll_event ev; ev.data.fd = STDIN_FILENO; ev.events = EPOLLIN; int epollFD = epoll_create(MAX); // 告诉内核监测的数目的最大值, 返回的epollFD为epoll管理句柄 epoll_ctl(epollFD, EPOLL_CTL_ADD, STDIN_FILENO, &ev); // 将ev和对应的STDIN_FILENO添加到epoll句柄,用于被epollFD管理 epoll_event all_events[MAX]; // "保活"的句柄直接从这里取 while(1) { int timeoutMS = 5000; // 5000ms // epoll_wait和select/poll函数的作用类似 int nfds = epoll_wait(epollFD, all_events, NUM, timeoutMS); // all_events和nfds是输出值, nfds是"保活"的数据 if(nfds < 0) { printf("epoll_wait error\n"); break; } if(nfds == 0) { printf("epoll_wait timeout\n"); continue; } printf("nfds is %d\n", nfds); for(int i = 0; i < nfds; i++) // 此处不用NUM, 而用nfds, 而all_events[i]渠道的就是"保活"的信息 { int iFD = all_events[i].data.fd; printf("iFD is %d\n", iFD); char szBuf[1024] = {0}; int recvLen = read(iFD, szBuf, sizeof(szBuf) - 1); if (recvLen > 0) { printf("recv data [%s]\n", szBuf); } else { epoll_ctl(epollFD, EPOLL_CTL_DEL, STDIN_FILENO, &ev); printf("recv error\n"); } } } close(epollFD); return 0;}
        建议有兴趣的同事实际玩一下上述程序。

转载地址:http://bswti.baihongyu.com/

你可能感兴趣的文章
垂直居中~
查看>>
【翻页时候 高大上的header栏 挡住渲染效果】和保留p格式。
查看>>
nth-child 麻蛋 不要被它的 child 锁迷惑 要同类元素才行 v-for也没有关系的!
查看>>
transition效果
查看>>
css效果记录
查看>>
垃圾element-ui实在太难用了
查看>>
文件下载, 存一下. 少玩手机少玩手机少玩手机!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
查看>>
不错的网站~ 收藏了qwq
查看>>
最近这周用到的注意事项 + 上周的.
查看>>
乱七八糟的注意点们
查看>>
【转载】css实现三角形。]
查看>>
c# 数组定义 新增 填充 数据
查看>>
js实现 一些数学公式(待补充)
查看>>
JavaScript不要直接console.log打印数组 、 求线段交点
查看>>
有关webpack、 prototype 属性
查看>>
【有关npm】 watchify 、browserify
查看>>
Leaflet
查看>>
numpy常用操作
查看>>
CNN简单例子 MNIST手写识别数据集
查看>>
在 Windows Terminal(WT) 里配置anaconda命令行环境
查看>>