首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>安装配置>正文

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

http://www.oklinux.cn  2007-04-29   ly44770  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

结合阻塞与非阻塞访问、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设备驱动阻塞与非阻塞   下一篇:深入浅出 Linux设备驱动中断处理介绍

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·深入浅出 Linux设备驱动中断处理介绍
·深入浅出 Linux设备驱动阻塞与非阻塞
·Linux操作系统文件系统的比较和选择
·Linux系统启动引导程序配置文件解析
·linux的运行模式:Runlevel详细解析
·在ThinkPad上安装Ubuntu的过程详解
·Linux下文件和目录的颜色代表的含义
·Linux操作系统的实用性和针对性介绍
·Windows与Linux系统比较 相似与不同
·菜鸟乐园 Debian GNU/Linux的安装过程
·菜鸟乐园 Linux系统各项开机服务介绍
·深入浅出 Linux字符设备驱动程序解析
·菜鸟乐园 Ubuntu Linux发行版新手指南
·VMware中Linux平台上网卡设置的说明
·新手看招 Linux下RPM软件的安装技巧
·通过PXE远程安装Linux系统全程解析
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Fedora11 beta i386安装图解
·红旗Linux 6.0 SP1桌面安装图解
·利用虚拟机在移动硬盘中安装Puppy Linu
·红旗Linux6.0 SP1桌面版安装 xfce 4.4.
·利用Ubuntu 8.10的usb-creator创建Live
·Ubuntu 8.10 更新源整理
·用kexec迅速切换内核
·Bazaar:分布式的版本控制系统
·Linux终端捕获
·openSUSE 11.0 NTFS分区硬盘安装过程
·GRUB2 引导程序的发展目标
·SUSE10.3恢复GRUB方法
  阅读排行
·在Linux系统下查看端口的使用情况及启
·在Linux操作系统下查看磁盘空间的好方
·使用源代码将 Glibc 升级到 2.6
·Ubuntu 8.10 更新源整理
·从硬盘安装RHEL 5(Red Hat Enterprise
·Useradd和Adduser添加用户工具使用方法
·Redhat5 Server下载、序列号以及相关介
·Linux对EXT3分区大小进行无损更改的步
·Linux系统的头文件和库文件搜索路径
· 在U盘上安装Damn Small Linux
·Linux下推荐的常用应用程序列表
·Fedora11 beta i386安装图解
·Ubuntu Linux 中 ADSL PPPoE 宽带上网
·主流显卡Linux驱动安装-Intel、ATi篇
·安装Ubuntu Linux分区的推荐方案和方法
网摘收藏: