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 1

static 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、代码运行效果

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.a和.so库文件是什么?

我们在编译开源代码后&#xff0c;通常会生成.a和.so这两个库文件&#xff0c;这两个文件有什么区别&#xff1f;又如何使用&#xff1f; 在 Linux 中&#xff0c;.a 和 .so 文件都是库文件&#xff0c;但它们有一些区别&#xff1a; 静态库文件&#xff08;.a&#xff09;&am…

PaddleDetection 项目使用说明

PaddleDetection 项目使用说明 PaddleDetection 项目使用说明数据集处理相关模块环境搭建 PaddleDetection 项目使用说明 https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.7/configs/ppyoloe/README_cn.md 自己项目&#xff1a; https://download.csdn.net/d…

融中财经专访 | 欧科云链:从跟随行业到引领行业

导读 THECAPITAL 新行业中的经验“老兵”。 本文4089字&#xff0c;约5.8分钟 作者 | 吕敬之 编辑 | 吾人 来源 | 融中财经 &#xff08;ID&#xff1a;thecapital&#xff09; 一个新兴行业从发展到成熟需要几个必要的推手&#xff1a;人才、产品、制度。 Web3.0&…

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…

Hystrix:实现分布式系统的延迟处理和容错保护机制

文章目录 一、Hystrix的概念与作用1.1、资源隔离1.2、熔断器模式1.3、命令模式1.4、监控和报警 二、Hystrix的使用方法三、总结 一、Hystrix的概念与作用 Hystrix是Netflix开源的一个库&#xff0c;用于处理分布式系统中的延迟和容错。它通过在服务调用之间添加保护机制&#…

Leetcode刷题-字符串详细总结(Java)

字符串 字符串可能在算法处理上面和数组是类似的&#xff0c;但是String和数组的数据结构还是有一些不一样的 1、反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 双指针的经典应用&#xff0c;两个指针同时向中间移动 public void reverseString(char[…

VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框&#xff08;忘截图了&#xff09;里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件&#xff08;在我这里好像是VM-Win10 x64.vmx&#xff0c;VM-Win10 x64是我给虚拟机取的名字&#xff09;在被使用中。 找到这个目录&#xff0c;删除.…

Python+Selenium+Unittest 之Unittest4(断言)

在unittest框架的TestCase类也提供了多种断言的方法。 断言常用方法 断言方法检查内容assertEqual(a,b)判断a是否等于b&#xff08;判断两个是不是同一个值&#xff09;assertNotEqual(a, b)判断a是否不等于b&#xff08;判断两个是不是同一个值&#xff09;assertTrue(a)判断a…

RAG应用开发实战(01)-RAG应用框架和解析器

1 开源解析和拆分文档 第三方的工具去对文件解析拆分&#xff0c;去将我们的文件内容给提取出来&#xff0c;并将我们的文档内容去拆分成一个小的chunk。常见的PDF word mark down, JSON、HTML。都可以有很好的一些模块去把这些文件去进行一个东西去提取。 优势 支持丰富的文…

[RK3399 Linux] 移植Linux 5.2.8内核详解

背景是在RK3399上面移植Rockchip官方提供的u-boot 2017.09 一、linux内核 1.1 源码下载 内核源码下载地址为:《https://www.kernel.org/》: 也可以到内核镜像网址下载https://mirrors.edge.kernel.org/pub/linux/kernel/,这里下载速度更快。 如果下载速度太慢,无法下载,…

2024.4.12蚂蚁庄园今日答案:豆腐在烹调时容易碎有什么办法可以避免?

原文来源&#xff1a;蚂蚁庄园今日答案 - 词令 蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&…

【数学建模】机器人避障问题

已知&#xff1a; 正方形5的左下顶点坐标 ( 80 , 60 ) (80,60) (80,60)&#xff0c;边长 150 150 150机器人与障碍物的距离至少超过 10 10 10个单位规定机器人的行走路径由直线段和圆弧组成&#xff0c;其中圆弧是机器人转弯路径。机器人不能折线转弯&#xff0c;转弯路径由与…

【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离

文章目录 1&#xff09;数字三角形1&#xff1a;顺推2&#xff1a;逆推 2&#xff09;最长上升子序列1&#xff1a;线性DP做法2&#xff1a;二分优化 3&#xff09;最长公共子序列4&#xff09;最长公共子串5&#xff09;字符串编辑距离 1&#xff09;数字三角形 1&#xff1a…

git修改本地提交历史邮箱地址

1、Git&#xff08;Git&#xff09; 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下&#xff1a;&#xff08;https://git-scm.com/docs/git-rebase&#xff09; 1、查看提交历史&#xff1a; 使用 git log 命令列出提交历史&#x…

HCIE考试第三题:业务容器化及割接

文章目录 业务容器化及割接题目和做题步骤如下3.1业务容器化及割接3.1创建CCE集群solo3.2创建NAT网关3.2.1申请EIP3.2.2创建NAT网关3.2.3添加SNAT规则3.3创建节点池3.3.1 创建namespace3.3.2创建节点池3.4 安装命令行工具kubectl3.4.1上传kubectl3.4.2上传kubeconfig配置文件3.…

Linux文件IO(3):使用文件IO进行文件的打开、关闭、读写、定位等相关操作

目录 1. 文件IO的概念 2. 文件描述符概念 3. 函数介绍 3.1 文件IO-open函数 3.2 文件IO-close函数 3.3 文件IO-read函数 3.4 文件IO-write函数 3.5 文件IO-lseek函数 4. 代码练习 4.1 要求 4.2 具体实现代码 4.3 测试结果 5. 总结 1. 文件IO的概念 posix(可移植操作系统接…

【React】路由鉴权

需求 未登录状态下&#xff0c;某些页面不可访问&#xff0c;白名单中的页面可以。未登录状态下&#xff0c;拦截通过修改url直接访问页面。判断是否有权访问某些页面。路由规则中每个页面都需要调用某个接口。 前提 使用的react-router-dom6 &#xff0c;这里只是举例&…

HarmonyOS开发实例:【数字管家app】

一&#xff0e;概述 本应用是基于RK3399开发板&#xff0c;使用OpenHarmony3.1-Release开发的应用。通过OpenHarmony的分布式技术&#xff0c;使多人能够一起画画。 1.应用运行效果图&#xff1a; 2.分布式画板使用示意图 如上图所示&#xff0c;用户1、用户2在各自本地端进行…

AcWing 1111. 字母 解题思路及代码

先贴个题目&#xff1a; 简单的dfs&#xff0c;没啥难点&#xff0c;直接上代码。 #include<iostream> #include<cmath> using namespace std;const int N 30;int r, s; int ans 0; char map[N][N]; bool st[26]; int dx[4] {0, 0, -1, 1}, dy[4] {1, -1, 0, …

stack的简单实现

stack的简单实现 适配器模式stack的实现代码实现 为什么没有迭代器的实现&#xff1f;实际默认容器是deque&#xff08;了解即可&#xff09;dequedeque的优缺点 谢谢观看 适配器模式 stack和我们之前学的list 和 vector 不一样采用的适配器模式 什么叫适配器呢&#xff1f;我…