Linux异步通知实验:应用程序对异步通知的处理

news/2024/12/2 16:44:43/

一. 简介

前面文章学习了 应用程序对异步通知的处理方法,另一篇文章实现了Linux驱动对异步通知的处理:

Linux应用程序对异步通知的处理-CSDN博客

Linux异步通知实验:驱动中异步通知的处理-CSDN博客

本文继续Linux异步通知实验,主要实现Linux应用程序对异步通知的处理(也就是信号处理函数)。

二. Linux异步通知实验:应用程序对异步通知的处理

1. 编写应用程序

在 15_async_notice工程目录下创建应用程序文件 signalApp.c,应用程序对异步通知的处理如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>/*
*测试按键是否按下
* 运行命令: ./signalApp /dev/key_irq
*/int fd; //信号处理函数
void sigio_signal_handler(int num)
{int ret = 0;int key_value = 0;ret = read(fd, &key_value, sizeof(key_value));if(ret < 0){printf("read key_value error!\n");}else{printf("Key0 Press! key_value: %d\n", key_value);}
}int main(int argc, char* argv[])
{int ret = 0;char * device_name = NULL;int key_value = 0;int flags = 0;if(argc != 2){printf("main's param number error!\n");return -1;}device_name = argv[1];fd = open(device_name, O_RDWR);if(fd < 0){printf("open led device failed!\n");return -1;}//1. 注册信号处理函数signal(SIGIO, sigio_signal_handler);//2. 将本应用程序PID告诉内核fcntl(fd, F_SETOWN, getpid()); //3. 开启异步通知flags = fcntl(fd, F_GETFL); //获取文件状态fcntl(fd, F_SETFL, flags | FASYNC);//开启当前进程的异步通知功能while(1){sleep(2);}return 0;
}

2.  编译应用程序

对 应用程序 signalApp.c进行编译:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/15_async_notice$ arm-linux-gnueabihf-gcc signalApp.c -o signalApp

我这里可以编译通过,生成应用程序 signalApp。

三. 对驱动模块进行测试

1.  拷贝驱动模块与应用程序

将上一篇文章(Linux驱动对异步通知处理的代码)编译生成的驱动模块 key_irq.ko与上面的应用程序 signalApp拷贝到 开发板系统中:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/15_async_notice$ sudo cp signalApp key_irq.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f

2.  加载测试驱动模块


http://www.ppmy.cn/news/1381033.html

相关文章

Midjourney指控Stability AI夜袭数据,网络风波一触即发

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Linux的MySQL安装与卸载

安装与卸载 卸载安装配置yum源安装MySQL 声明一下本人用的Linux版本是CentOs7.9版本的。 卸载 如果我们用的云服务器&#xff0c;云服务器可能会自带MySQL或者mariadb&#xff08;其实就是MySQL的一个开源分支&#xff09;&#xff0c;如果我们不想用自带的&#xff0c;需要先…

nginx详解,配置http,https,负载均衡,反向代理,SMTP 代理步骤说明

Nginx 是一款高性能的开源 Web 服务器,同时也可以用作反向代理服务器、负载均衡器、HTTP 缓存、HTTPS 中继、以及作为邮件代理服务器等。以下是 Nginx 可以实现的一些常见用途: 静态内容服务: Nginx 可以用来提供静态内容,比如 HTML、CSS、JavaScript 文件等。 动态内容服务…

C++(3/12)

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和 #include <iostream>using name…

C#+datax实现定时增量同步

要使用C#和DataX实现定时增量同步&#xff0c;你可以使用以下步骤&#xff1a; 1. 安装DataX&#xff1a;首先&#xff0c;确保你已经安装了DataX。你可以从DataX的官方仓库中获取最新版本。 2. 配置DataX 任务&#xff1a;创建一个DataX任务&#xff0c;定义源&#xff08;sou…

C++ 数据封装的方法,重点是其编程思想

数据封装 先说一下概念吧&#xff01; 在C中&#xff0c;数据封装一般指的是将数据和操作这些数据的函数绑定在一起的程序设计方式。通常使用C的类来实现。 作用 C中&#xff0c;数据封装是C面向对象编程的一种核心概念。 通过数据封装&#xff0c;即将数据和操作数据的函…

强化学习工具箱(Matlab)

1、Get Started 1.1、MDP环境下训练强化学习智能体 MDP环境如下图 每个圆圈代表一个状态每个状态都有上或下的选择智能体从状态 1 开始智能体接收的奖励值为图中状态转移的值训练目标是最大化累计奖励 &#xff08;1&#xff09;创建 MDP 环境 创建一个具有 8 个状态和 2 …

新概念英语第二册(82)

【New words and expressions】生词和短语&#xff08;7&#xff09; monster n. 怪物 sailor n. 海员 sight v. 见到 creature n. 动物&#xff0c;生物 peculiar …