最近在网上看到有网友问到了关于Linux系统设备驱动异步通知是什么的问题,相信不少网友都有这样的问题吧!今天我们就来和大家详细说说,在上一篇文章中我们向大家介绍了VM下Linux的网络共享Win文件夹的方法,相信大家肯定都有所了解了吧!下面大家就跟着我们txwb网吧联盟的网吧系统栏目一起去看看今天的主题吧!
关于异步通知,其意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上"中断"地概念,比较准确的称谓是"信号驱动(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>
#defineMAX_LEN100
voidinput_handler(intnum)
{
chardata[MAX_LEN];
intlen;
//读取并输出STDIN_FILENO上的输入
len=read(STDIN_FILENO,&data,MAX_LEN);
data[len]=0;
printf("inputavailable:%s\n",data);
}
main()
{
intoflags;
//启动信号驱动机制
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系统设备驱动异步通知的相关内容我们就介绍到这里了,大家如果还有什么想知道的地方可以去本站的网吧系统栏目去查找,如果找不到相关内容,可以留言一起讨论,当然如果大家有什么好的资料也可以和我们一起分享哦!
本文来源:网络整理 作者:佚名