首页 > 系统相关 >Linux异步通知

Linux异步通知

时间:2024-08-26 20:51:57浏览次数:8  
标签:异步 struct 中断 通知 应用程序 fasync 信号 Linux 函数

1.异步通知简介

我们首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数,在中断服务函数中做具体的处理。
信号类似于我们硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。
异步通知的核心就是信号,在 arch/xtensa/include/uapi/asm/signal.h 文件中定义了 Linux 所支
持的所有信号,这些信号如下所示:


除了 SIGKILL(9)和 SIGSTOP(19)这两个信号不能被忽略外,其他的信号都可以忽略。这些信号就相当于中断号,不同的中断号代表了不同的中断,不同的中断所做的处理不同,因此,驱动程序可以通过向应用程序发送不同的信号来实现不同的功能。
如果要在应用程序中使用信号,那么就必须设置信号所使用的信号处理函数,在应用程序中使用 signal 函数来设置指定信号的处理函数,signal 函数原型如下所示:

2.驱动中的信号处理

fasync_struct结构体

首先我们需要在驱动程序中定义一个 fasync_struct 结构体指针变量, fasync_struct 结构体内容如下:

般将 fasync_struct 结构体指针变量定义到设备结构体中

fasync函数

如果要使用异步通知,需要在设备驱动中实现 file_operations 操作集中的 fasync 函数,此函数格式如下所示:

int (*fasync) (int fd, struct file *filp, int on)


参考代码:

在关闭驱动文件的时候需要在 file_operations 操作集中的 release 函数中释放 fasync_struct,
fasync_struct 的释放函数同样为 fasync_helper,release 函数参数参考实例如下:

kill_fasync函

3.应用程序的处理

标签:异步,struct,中断,通知,应用程序,fasync,信号,Linux,函数
From: https://blog.csdn.net/guangali/article/details/141573079

相关文章

  • linux目录结构以及文件操作
    从头学习Linux的学习记录。1.Linux目录结构以及文件操作    linux和Windows一样都是操作系统,但是Linux经常用于嵌入式设备中,而我们学习的Ubuntu属于Linux的发行版,带有图形界面,但跑在嵌入式设备上的Linux常没有图形界面,直接用命令行操作,这在对资源敏感的嵌入式领域,节......
  • 大厂面试官:Redis分布式锁掌握的还可以啊,那你了解Redis集群下的分布式锁么? 我:不好意思,
    大厂常问面试题,Redis集群下的分布式锁,你了解多少?希望大家能关注点赞,创作不易且没收益,您的小小举动却能给予我大大的鼓励,会激励我继续创作出高质量文章......
  • Linux系统性能调优详细讲解和案例示范
    Linux系统以其稳定性和高效性广受欢迎,但在实际使用过程中,随着负载的增加,性能问题也不可避免地出现。本文将深入探讨Linux系统性能调优的核心概念,介绍一些常用的性能定位命令,并结合实际案例详细说明如何解决常见的性能问题。一、性能调优概述在Linux系统中,性能调优是确保......
  • Linux 下 gdb 的使用
    目录一、概述1、安装和启动GDB二、GDB常用命令1、查看源码2、断点2.1设置断点2.2查看断点信息2.3删除断点2.4激活/禁用断点2.5观察断点2.6捕获信号2.7线程中断3、查看信息3.1查看数据3.2查看内存3.3查看栈信息3.4查看栈帧信息4、运行、调试5、编辑和搜......
  • centos9(linux): 安装clamav
    一,官方网站https://www.clamav.net/如图:二,安装1,开启epel仓库[root@blog~]#yuminstall-yepel-release2,安装clamav[root@blog~]#yuminstallclamav说明:病毒库数据较大,200多M,安装时需要等待较长时间安装完成后查看clamav的版本:[root@blog~]#clamscan-VCla......
  • Linux环境下的Mysql数据库入门-基于Centos系统
    关系型数据库:oracle===》收钱,大型的公司msyql===》开源的免费的sqlserver===>微软非关系型数据库:hbase===>大数据‘Redismangdb下载mysql:yuminstallmysqlyuminstallmysql-serverrpm-qa|grep-imysql===》查看数据库有没有安装好servicemysqld......
  • FreeRTOS 快速入门(八)之任务通知
    目录一、任务通知1、基本概念2、优势及限制3、通知状态和通知值二、任务通知的使用1、xTaskNotifyGive/ulTaskNotifyTake2、xTaskNotify/xTaskNotifyWait3、xTaskNotifyAndQuery一、任务通知1、基本概念FreeRTOS从V8.2.0版本开始提供任务通知这个功能,每个任务......
  • 600条最强 Linux 命令总结(珍藏版)
    一、基本命令uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件(SMBIOS/DMI)hdparm-i/dev/hda罗列一个磁盘的架构特性hdparm-tT/dev/sda在磁盘上执行测试性读取操作系统信息arch显示机器的处理器架构uname-m显示机......
  • Linux 进程 | 进程优先级&进程的环境变量
    文章目录进程概念4、进程优先级4.1基本概念4.2查看系统进程4.2.1ps-l4.2.2PRI&NI4.3用top命令更改已存在进程的nice:5、环境变量5.1常见环境变量5.2查看环境变量5.3测试PATH配置环境变量5.4代码中获取环境变量5.4代码中获取环境变量进程概念4、进程优先级4......
  • redis下载与安装(以Ubuntu Linux为例)
    redis的下载与安装(Ubuntu)一、下载从GitHub上下载redis官方压缩包:redis官方将下载好的压缩包放入家目录(~)下。(可以使用一些ftp工具将文件传输到Ubuntu)二、安装解压并执行shell命令#进入家目录cd~#7.4.0是我此时安装的版本#输入tarzxvfredis后按tab键补全即可......