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分支…

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

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

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…

【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 …

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

文章目录 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…

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…

linux常见使用命令

查看CPU内存 cat /proc/cpuinfo 动态查看 top 部分版本中没有&#xff0c;需要自行安装的命令 dstat 查看内核版本号 uname -r 系统版本的全部信息 uname -a 查看所有关于网络的相关信息 netstat -anp 查看8080端口是否被占用 netstat -anp | grep 8080 指定进程名字都有那些连…

Meta Earth:模块化公链的技术革新与市场潜力解析

随着加密货币市场逐渐回暖&#xff0c;投资者和技术爱好者都在寻找下一个重大机遇&#xff0c;特别是在比特币ETF获批和比特币减半事件的到来&#xff0c;全球加密货币市场正迎来新一轮的牛市周期。在此背景下&#xff0c;模块化公链技术作为区块链领域的一大创新点&#xff0c…

详解 node/浏览器 事件循环中的微任务的优先级

关于事件循环机制&#xff0c;可以参考这篇文章 node 环境中的微任务 这里面补充一个&#xff0c;node 中微任务是有优先级的&#xff0c;常见的微任务有&#xff0c;其中 process.nextTick 的优先级最高&#xff0c;会优先执行&#xff0c;剩下的按照进入微任务队列的顺序&a…

2024年第五届计算机视觉与信息技术国际会议(CVIT 2024)即将召开!

2024年第五届计算机视觉与信息技术国际会议&#xff08;CVIT 2024&#xff09;将于2024年8月16-18日在北京举行。CVIT 2024由北方工业大学主办&#xff0c;国内外的专家学者将齐聚一堂&#xff0c;共同分享最新的技术突破、研究方法和应用案例&#xff0c;共同推动计算机视觉与…

开启未来之门:Victoria VR 与 OpenAI 整合,引领 Web3 AI+AR 风潮

加密市场一直是科技创新的前沿阵地。虚拟现实&#xff08;VR&#xff09;技术和人工智能&#xff08;AI&#xff09;被认为是引领未来的重要技术之一&#xff0c;Web3 自然不会缺席这场足以改变人们生活方式的变革&#xff01; 2月份&#xff0c;Apple Vision Pro 的发售迅速引…

Python爬虫网络实践:去哪儿旅游数据爬取指南

Python爬虫网络实践&#xff1a;去哪儿旅游数据爬取指南 在这个博客中&#xff0c;我们将探索如何使用 Python 来进行网络数据抓取&#xff0c;并以抓取旅游数据为例进行演示。我们将通过一个简单的示例来说明如何利用 Python 中的常用库进行网页抓取&#xff0c;从而获取旅游…

快速理解JS中的原型和原型链

快速理解JS中的原型和原型链 在我们学习JS的过程中&#xff0c;我们总会接触到一些词&#xff1a;“原型”&#xff0c;“原型链”。那么今天我就来带大家来学习学习原型和原型链的知识吧&#xff01; 在开始之前&#xff0c;我们明确一下我们接下来想要学习的目标&#xff1a…