当前位置: 首页 > news >正文

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

一.  简介

前面几篇文章学习了 Linux异步通知机制,以及Linux驱动对异步通知部分涉及的内容。文章地址如下:

Linux异步通知简介-CSDN博客

Linux驱动中的异步通知机制:信号处理方法-CSDN博客

本文来学习Linux应用程序对异步通知的处理。

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

1. 应用程序对异步通知的处理思路

异步通知机制就是:当驱动程序可以 访问时,会主动告诉应用程序。驱动可以通过主动向应用程序发送信号的方式,来报告自己可以访问了,应用程序获取到信号以后,就可以从驱动设备中读取或者写入数据了。

(1) 首先,应用程序需要 注册信号处理函数(通过 signal()函数注册),并实现信号处理函数(旨在当有某个信号报告自己时,会进入信号处理函数执行)。

(2)  其次,驱动如何知道要将某个信号报告给哪个应用程序?

这里应用程序就需要将自己的进程号PID告诉 内核。

(3) 最后,应用程序要开启异步通知。

2.  应用程序对异步通知的处理步骤

应用程序对异步通知的处理包括以下三步:

(1)  注册信号处理函数

应用程序根据驱动程序所使用的信号来设置信号的处理函数,应用程序使用 signal() 函数来设置信号的处理函数。前面文章已经详细的讲过了。

(2)  将本应用程序的进程号告诉给内核

使用 fcntl()函数 将本应用程序的进程号告诉给内核,如下代码调用:
 fcntl(fd, F_SETOWN, getpid()) 

(3)  开启异步通知

使用如下两行程序开启异步通知:

flags = fcntl(fd, F_GETFL); /* 获取文件状态 */
fcntl(fd, F_SETFL, flags | FASYNC); /* 开启当前进程异步通知功能 */
重点就是通过 fcntl 函数设置进程状态为 FASYNC ,经过这一步,驱动程序中的 fasync 函数就会执行。

关于 应用程序对异步通知的处理学习这里,接下来通过一个实验来学习驱动与应用程序对异步通知的处理。

相关文章:

  • 算法时空复杂度分析:大O表示法
  • print()大揭秘:如何用Python打印出多样字符
  • 4G安卓核心板T310_紫光展锐平台方案
  • MYSQL--JSON_OBJECT 和 JSON_ARRAYAGG
  • Qt控制台项目也能使用opencv的imshow来显示摄像头视频
  • Playwright中page.locator快速查找网页元素和对象交互操作
  • Python刘诗诗
  • 使用axios时,函数内的this代表什么?
  • 【git】常用操作
  • MySQL中的视图
  • iOS runtime理解和应用场景
  • 前端性能基础测试研究
  • Java面试题:工厂模式与内存泄漏防范?线程安全与volatile关键字的适用性?并发集合与线程池管理问题
  • CUDA下载安装与配置
  • 简单了解TCP/IP四层模型
  • 【刷算法】从上往下打印二叉树
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • ➹使用webpack配置多页面应用(MPA)
  • Android交互
  • JS基础之数据类型、对象、原型、原型链、继承
  • PHP的类修饰符与访问修饰符
  • Redis在Web项目中的应用与实践
  • uva 10370 Above Average
  • Wamp集成环境 添加PHP的新版本
  • 程序员该如何有效的找工作?
  • 从重复到重用
  • 大快搜索数据爬虫技术实例安装教学篇
  • 服务器从安装到部署全过程(二)
  • 关于 Cirru Editor 存储格式
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 聊聊directory traversal attack
  • 如何实现 font-size 的响应式
  • 数据结构java版之冒泡排序及优化
  • 小而合理的前端理论:rscss和rsjs
  • 协程
  • Semaphore
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (3)nginx 配置(nginx.conf)
  • (70min)字节暑假实习二面(已挂)
  • (ros//EnvironmentVariables)ros环境变量
  • (编译到47%失败)to be deleted
  • (原)Matlab的svmtrain和svmclassify
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Linux整合apache和tomcat构建Web服务器
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net(C#)中String.Format如何使用
  • .NetCore部署微服务(二)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20161214]如何确定dbid.txt
  • [2544]最短路 (两种算法)(HDU)
  • [383] 赎金信 js