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

yuan306801350

yuan306801350

2016-01-29 17:38

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

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/linux/)
展开更多 50%)
分享

猜你喜欢

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

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux设备驱动异步通知介绍

深入浅出Linux设备驱动中断处理介绍

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux设备驱动中断处理介绍

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

深入浅出Linux设备驱动之并发控制

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux设备驱动之并发控制

深入浅出Linux字符设备驱动程序解析

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux字符设备驱动程序解析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

深入浅出分析Linux设备驱动程序中断 (1)

PHP
深入浅出分析Linux设备驱动程序中断  (1)

深入浅出Linux设备驱动编程之内核模块

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
深入浅出Linux设备驱动编程之内核模块

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

高手进阶Linux系统下MTD/CFI驱动介绍

高手进阶Linux系统下MTD/CFI驱动介绍

真正了解Windows xp SP2神秘数字签名

真正了解Windows xp SP2神秘数字签名
下拉加载更多内容 ↓