深入浅出 Linux设备驱动异步通知介绍

原创 2011年09月01日 14:45:02

结合阻塞与非阻塞访问、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()函数激发一个信号,此部分工作留给读者来完成。


深入浅出:Linux设备驱动之字符设备驱动

原文地址:http://blog.jobbole.com/86531/ 一、linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序: 字符设备:是指只能一个字节...
  • xiaohuima_dong
  • xiaohuima_dong
  • 2015年05月30日 07:58
  • 1504

Linux设备驱动开发详解-Note(19)---Linux 设备驱动中的异步通知与异步 I/O(2)

Linux 设备驱动中的异步通知与异步 I/O(2) 成于坚持,败于止步 Linux 2.6 异步 I/O  AIO 概念与 GNU C 库函数  Linux 系统中最常用的输入/输出(I...
  • xinyuwuxian
  • xinyuwuxian
  • 2013年07月17日 20:21
  • 3981

深入浅出:Linux设备驱动之异步通知和异步I/O

原文出处: 时光漫步LH    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问。因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类...
  • yuzeze
  • yuzeze
  • 2016年06月29日 15:07
  • 1079

linux 设备驱动异步通知总结

  • 2016年02月18日 15:18
  • 16KB
  • 下载

Linux的异步通知字符设备驱动

Fasync字符驱动: 1、在我们用户程序下所做的工作: ⑴ 注册信号处理函数。 通过signal 或sigaction()实现。 ⑵ 使进程成为该文件的的属主进程。  通过fcntl 的F_SETO...
  • sinat_34866256
  • sinat_34866256
  • 2017年01月10日 18:32
  • 129

Linux设备驱动之异步通知

Linux设备驱动之异步通知的原理及简单代码实现
  • ljmiaw
  • ljmiaw
  • 2017年07月16日 21:02
  • 81

linux字符设备驱动-异步通知笔记

一、开发环境 1、内核:Linux 2.6.22.6; 2、JZ2440 3、ubuntu 9.10
  • cs953575
  • cs953575
  • 2017年03月07日 09:41
  • 123

linux设备驱动开发学习之旅--异步通知

[cpp] view plaincopy /**   * Author:hasen   * 参考 :《linux设备驱动开发详解》   * 简介:android小菜...
  • zhoudengqing
  • zhoudengqing
  • 2014年11月25日 17:55
  • 371

linux设备驱动归纳总结(三):7.异步通知fasync

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 异步通知fasync...
  • laoylhuli
  • laoylhuli
  • 2013年03月27日 09:24
  • 612

Linux设备驱动之阻塞I/O与异步通知

 阻塞与非阻塞访问是 I/O 操作的两种不同模式,前者在 I/O 操作暂时不可进行时会让进程睡眠,后者则不然。在设备驱动中阻塞 I/O一般基于等待队列来实现,等待队列可用于同步驱动中事件发生的先...
  • oaa608868
  • oaa608868
  • 2016年12月08日 18:08
  • 135
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入浅出 Linux设备驱动异步通知介绍
举报原因:
原因补充:

(最多只允许输入30个字)