天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

Linux系统设备驱动异步通知是什么

2013-1-29网络整理佚名

  最近在网上看到有网友问到了关于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系统设备驱动异步通知的相关内容我们就介绍到这里了,大家如果还有什么想知道的地方可以去本站的网吧系统栏目去查找,如果找不到相关内容,可以留言一起讨论,当然如果大家有什么好的资料也可以和我们一起分享哦!

本文来源:网络整理 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行