Linux函数学习 epoll

1、Linux epoll函数

1.1、创建epoll实例

int epoll_create1(int flag);

返回值:-1 失败,非负数 成功

flag  :默认传入0

1.2、管理epoll对象

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

epfd  :epoll 对象文件句柄

op     :epoll操作动作,添加,修改,删除

fd       :需要轮询的文件句柄

event  :需要监听的epoll事件

1.3、等待epoll事件

 int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);

epfd  :epoll 对象文件句柄

events  :epoll事件上报

maxevents   : 最大处理epoll事件数量

timeout : 超时时间

2、函数实例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/input.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <string.h>#define MAX_EVENT 1static char * eventTypeToString(__u16 type){switch(type){case EV_SYN:return "EV_SYN";case EV_KEY:return "EV_KEY";case EV_REL:return "EV_REL";case EV_ABS:return "EV_ABS";case EV_MSC:return "EV_MSC";case EV_SW:return "EV_SW";default:return "UNKOWN";}
}static char * eventCodeToString(__u16 code){switch(code){case KEY_ESC:return "KEY_ESC";case KEY_POWER:return "KEY_POWER";default:return "UNKOWN";}
}int main (int argc, char ** argv){int fd; int mEpollFd;int ret;struct input_event event;struct epoll_event ep_event;struct epoll_event pending_event[MAX_EVENT];if(argc != 2){printf("Usage: %s <dev> \n", argv[0]);}fd = open(argv[1], O_RDWR | O_NONBLOCK);if(fd < 0){printf("open %s err \n", argv[1]);} else {printf("open %s success \n",argv[1]);}/*创建EpollFd*/mEpollFd = epoll_create1(0);if(mEpollFd <0){printf("epoll create err = %s \n", strerror(errno));} else {printf("epoll create success \n");}/*添加监听*/ep_event.events = EPOLLIN;ep_event.data.fd = fd;ret = epoll_ctl(mEpollFd, EPOLL_CTL_ADD, fd, &ep_event);if(ret < 0){printf("epoll_ctl err = %s \n", strerror(errno));} else {printf("epoll_ctl success \n");}/*等待文件字符变化*/while(1){ret = epoll_wait(mEpollFd, pending_event, MAX_EVENT, 5);if(ret > 0){if(pending_event[0].data.fd == fd){if (pending_event[0].events & EPOLLIN) {while(read(fd, &event, sizeof(event)) == sizeof(event)){printf("epoll get event: type =0x%x, Code = 0x%x value = 0x%x \n",event.type, event.code, event.value);printf("epoll get event: type = %s, Code = %s value = 0x%x \n",eventTypeToString(event.type), eventCodeToString(event.code), event.value);}}}} else if (ret == 0){//printf("epoll_wait time out \n");} else {perror("epoll_wait error \n");}}return 0;
}

3、代码运行效果

编译二进制文件,运行到手机端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rebase和merge的区别

合并分支用rebase还是merge&#xff1f; 实际开发工作的时候&#xff0c;我们都是在自己的分支开发&#xff0c;然后将自己的分合并到主分支&#xff0c;那合并分支用2种操作&#xff0c;这2种操作有什么区别呢&#xff1f; git上新建一个项目&#xff0c;默认是有master分支…

“_, preds_m = torch.max(cls + cou2cls, 1)”为什么要将两者相加

将cls&#xff08;分类预测&#xff09;和cou2cls&#xff08;分类和计数的组合预测&#xff09;相加是一种常见的集成学习技术&#xff0c;目的是结合两种预测结果的优势来提高整体预测的准确性。在这个特定的场景中&#xff0c;有几个可能的原因和好处&#xff1a; 1. 信息融…

蓝桥杯物联网竞赛_STM32L071KBU6_我的全部省赛及历年模拟赛源码

我写的省赛及历年模拟赛代码 链接&#xff1a;https://pan.baidu.com/s/1A0N_VUl2YfrTX96g3E8TfQ?pwd9k6o 提取码&#xff1a;9k6o

MATLAB遗传算法物流配送中心选址进阶版案例讲解

MATLAB遗传算法物流配送中心选址进阶版案例讲解 MATLAB遗传算法物流配送中心选址进阶版案例讲解

贪心算法-分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸 s[j]…

YOLOv8模型剪枝实战:DepGraph(依赖图)方法

课程链接&#xff1a;YOLOv8模型剪枝实战&#xff1a;DepGraph(依赖图)方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器&#xff0c;本课程使用DepGraph&#xff08;依赖图&#xff09;剪枝方法对YOLOv8进行网络剪枝&#xff0c;使其更加轻量和实用…

Android源码笔记-输入事件(二)

这一节主要了解输入事件的获取&#xff0c;InputReaderThread继承自C的Thread类&#xff0c;Thread类封装了pthread线程工具&#xff0c;提供了与Java层Thread类相似的API。C的Thread类提供了一个名为threadLoop()的纯虚函数&#xff0c;当线程开始运行后&#xff0c;将会在内建…

Tubi 十岁啦!

Tubi 今年十岁了&#xff0c;这十年不可思议&#xff0c;充满奇迹&#xff01; 从硅谷一个名不见经传的创业小作坊&#xff0c;转变成为四分之一美国电视家庭提供免费流媒体服务的北美领先的平台&#xff1b; 从费尽心力终于签下第一笔内容合作协议&#xff0c;到现在与 450 …

3岁以下幼儿玩具电脑电子方案

幼儿玩具电脑是一种专为儿童设计的电子教育产品&#xff0c;它通过提供多样化的学习内容和互动方式&#xff0c;旨在促进孩子的早期教育和发展。具体作用如下&#xff1a; 培养学习兴趣&#xff1a;早教机通常设计有丰富的教育资源和有趣的互动游戏&#xff0c;能够激发孩子对…

Mongodb快速入门

一、概述 1.1介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展高性能数据存储解决方案。(并不是单纯的内存数据库)&#xff0c;官方地址 https://www.mongodb.com/ 操作语法与 JavaScript 类似&#xff0c;容易上手&#xff0c;学习成本低…

linux离线安装redis

一、下载linux版本压缩包 地址&#xff1a;Download | Redis 为了安全稳定性&#xff0c;下载 6.2 版本&#xff0c;不下载最新版 二、上传到linux服务器 笔者上传到 /opt/redis下 &#xff0c;使用Xftp和Xshell工具&#xff0c;使用root权限 cd /opt sudo mkdir redis cd r…

Windows server服务器mysql备份批处理

创建mysql.bat echo ry_prod backup is starting... set filenameD:\bim\bak\db\ry_prod\ry_prod%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.sql echo %filename% mysqldump --default-character-setutf8 -h 10.32.8.48 -ury_prod -p123456 ry_p…

【Qt踩坑】ARM 编译Qt5.14.2源码-QtWebEngine

1.下载源码 下载网站&#xff1a;Index of /new_archive/qt/5.14/5.14.2/single 2.QWebEngine相关依赖 sudo apt-get install flex libicu-dev libxslt-dev sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev sudo apt-get …

vue2 vue3虚拟列表实现

参考&#xff1a; vue 怎么实现虚拟滚动效果&#xff1f; - 知乎 vue2实现 <template><divclass"container"ref"container":style"{ --rowHeight: rowHeight px }"scroll"onScroll"><div class"scroll" r…

【刷题篇】回溯算法(二)

文章目录 1、求根节点到叶节点数字之和2、二叉树剪枝3、验证二叉搜索树4、二叉搜索树中第K小的元素5、二叉树的所有路径 1、求根节点到叶节点数字之和 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表…

Vue2创建过程记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、搭建node二、安装Vue CLI三、搭建新项目四、Elemet安装&#xff08;参照官网步骤[Element官网](https://element.eleme.cn/#/zh-CN/component/installation)&am…

003 传参

文章目录 传参http 状态码传参方式&#xff08;1&#xff09;URL请求参数 key 与 方法中的形参名一致&#xff08;2&#xff09;URL请求参数 key与RequestParam("id") 中的别名一致&#xff08;3&#xff09; 形参是POJO类&#xff0c;URL 参数 key 与pojo类的 set方…

MXNet安装流程详解:跨平台、全版本兼容

一、 MXNet简介 1.1 MXNet的特点 MXNet是一种高效、灵活、可扩展、跨平台的深度学习框架&#xff0c;具有以下显著特点&#xff1a; - 高效&#xff1a;MXNet采用了多种并行处理技术&#xff0c;可以利用CPU和GPU的计算能力&#xff0c;有效地加速了模型训练和推理的速度。 …

Ruoyi-vue-pro Vue + nginx 二级目录部署到云服务器

http://www.your-server.com/ 这是一级目录&#xff0c;由于项目多&#xff0c;一般会通过二级域名http://oa.your-server.com/或二级目录http://www.your-server.com/oa来发布&#xff0c;本篇记录一下二级目录发布。先看效果 1、router/index.js配置base export default new …

【Linux】进程间通信——匿名管道|命名管道

目录 什么是进程间通信 管道 匿名管道 什么是进程间通信 进程间通信&#xff0c;顾名思义就是两个进程互相通信。 可是进程是独立的&#xff0c;该如何通信呢&#xff1f; 类比你和你的朋友在网上聊天&#xff0c;你们两个人也是独立的&#xff0c;是如何通信的呢&#xf…