深入浅出Linux设备驱动编程--设备驱动中的异步通知

2006-11-20 23:37:00

6.设备驱动中的异步通知
结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”地概念,比较准确的称谓是“信号驱动(SIGIO)的异步I/O”。
我们先来看一个使用信号驱动的例子,它通过signal(SIGIO, input_handler)对STDIN_FILENO启动信号机制,输入可获得时input_handler被调用,其源代码如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
#define MAX_LEN 100
void input_handler(int num)
{
char data[MAX_LEN];
int len;
//读取并输出STDIN_FILENO上的输入
len = read(STDIN_FILENO, &data, MAX_LEN);
data[len] = 0;
printf("input available:%s\n", data);
}
main()
{
int oflags;
//启动信号驱动机制
signal(SIGIO, input_handler);
fcntl(STDIN_FILENO, F_SETOWN, getpid());
oflags = fcntl(STDIN_FILENO, F_GETFL);
fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);
//最后进入一个死循环,程序什么都不干了,只有信号能激发input_handler的运行
//如果程序中没有这个死循环,会立即执行完毕
while (1);
}
程序的运行效果如下图:
为了使设备支持该机制,我们需要在驱动程序中实现fasync()函数,并在write()函数中当数据被写入时,调用kill_fasync()函数激发一个信号,此部分工作留给读者来完成。

本文出自 “宋宝华的博客” 博客,请务必保留此出处http://21cnbao.blog.51cto.com/109393/120095

转载于:https://blog.51cto.com/7090376/1263742

深入浅出Linux设备驱动编程--设备驱动中的异步通知相关推荐

  1. linux编写驱动后write已杀死_《Linux4.0设备驱动开发详解》笔记--第九章:Linux设备驱动中的异步通知与同步I/O...

    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似"中断"的异步通 ...

  2. linux驱动编程——ch340x驱动移植

    Linux驱动编程--ch340x驱动移植 主要概念: ​ ch340x驱动移植 ​ 作为通用器件,厂商都有提供适配各种平台的驱动.linux一般会提供驱动源码. ​ 一般所谓驱动移植,就是将厂商的驱 ...

  3. Linux设备驱动中的异步通知

    异步通知的概念: 一旦设备就绪,主动通知应用程序.这样应用程序根本不需要查询设备状态. 阻塞,非阻塞和异步: - 阻塞 IO 是等待设备可访问后再访问 - 非阻塞 IO 是查询设备是否可以访问 - 异 ...

  4. 第三十四篇:在SOUI中使用异步通知

    概述 异步通知是客户端开发中常见的需求,比如在一个网络处理线程中要通知UI线程更新等等. 通常在Windows编程中,为了方便,我们一般会向UI线程的窗口句柄Post/Send一个窗口消息从而达到将非 ...

  5. 详解微信支付中的异步通知

    1.什么是异步通知? 先说说同步通知,在平时我们付款的时候,特别是在银行转账的时候点击付款后一般都会给我们反馈显示付款成功,这个通知就是同步通知.同步通知仅仅代表调用支付接口成功,也就是用户付款的操作 ...

  6. 深入浅出linux工具与编程 下载,8208.深入浅出Linux工具与编程.pdf

    <> 猛点这里下载全部内容 目录: 第1篇Linux命令及其工具 第1章Linux系统与命令 1.1Linux操作系统 1.1.1Linux重要概念 1.1.2Linux组成 1.1.3L ...

  7. LINUX C系统编程与PYTHON中的时间模块对比

    今天看python时间模块time的时候发现和LINUX系统编程中的时间调用函数基本一样,以前刚好没有好好学习LINUX C编程的时间模块就对比进行了学习. 本文只是给出函数接口和使用方式,详细了解请 ...

  8. Linux 设备驱动中的 I/O模型(二)—— 异步通知和异步I/O

    阻塞和非阻塞访问.poll() 函数提供了较多地解决设备访问的机制,但是如果有了异步通知整套机制就更加完善了. 异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态 ...

  9. Linux设备驱动编程第三版-笔记

    第1章 设备驱动简介 1.1 驱动程序的角色 机制:提供什么能力. 策略:如何使用这些能力. 1.2. 划分内核 内核的角色可以划分:     一:进程管理 二:内存管理 三:文件系统 四:设备控制 ...

  10. 主线剧情07.3-Linux驱动编程-内核态API总结备查

    驱动程序 中的 设备相关 和 常用内核态 API 总结备查 多处网搜和引用,做了良好的整理,侵删. 本文对应的驱动源代码在 github/gitee 仓库里:并且 在 Github 上的原版文章日后可 ...

最新文章

  1. 盘点《头号玩家》里的 VR 技术,现在就能造个 Oasis 出来
  2. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果...
  3. jquery 字符串查找_Python Appium 库IOS特有元素查找API介绍
  4. Angular:Use function as controller
  5. gitbook新版本 build命令导出的html不能跳转?
  6. Asterisk学习进阶-3
  7. C语言 printf函数实现
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的家庭财务管理系统
  9. 数据结构:栈的了解与示例(逆波兰表达式)
  10. 键值 keyCode事件属性
  11. C3P0连接池配置参数讲解
  12. 游戏及相关CG行业知识分享大V全整合
  13. 选择华为帐号作为第三方登录的三个理由!
  14. 攻防世界re:logmein
  15. 中国互联网迎来第二次电商盛世:谁淘汰了红极一时的淘品牌?
  16. office_professional_plus_2010安装
  17. ffmpeg插帧算法
  18. oracle中sql查询增加自增序列号
  19. 解决depot_tools clone不了 443 connection refused
  20. 解决[WARNING]: sftp transfer mechanism failed on [xx]. Use ANSIBLE_DEBUG=1 to see detailed information

热门文章

  1. paip.提升分词---准确度--常用量词表
  2. 提升安全性----用户资金防篡改
  3. 中美深度对比,资产管理行业的核心是什么?
  4. Julia: Beginning deep learning with 500 lines of Julia
  5. CTP: 11:31分等非交易时段报单录入的应对
  6. Julia:V0.3.0 正式发布,好消息!
  7. OpenStack Rocky Octavia 的实现与分析(零)架构简介
  8. 【故障诊断分析】基于matlab GUI小波包能量可视化设计【含Matlab源码 1788期】
  9. 【图像隐写】基于matlab GUI DCT数字水印嵌入+提取【含Matlab源码 1671期】
  10. 毕设题目:Matlab瑕疵检测