设备 完成写操作时发送信号  if(dev->async_queue)   kill_fasync(&dev->async_queue,SIGIO,POLL_IN); } static ssize_t xxx_read(...) {  ...  完成读设备操作时发....">

当前位置:  技术问答>linux和unix

应用层获得SIGIO信号如何区分是kill_fasync(poll_in)或kill_fasync(poll_out)产生的

    来源: 互联网  发布时间:2017-03-09

    本文导语:  static ssize_t xxx_write(...) {  ...  echo "....">设备 完成写操作时发送信号  if(dev->async_queue)   kill_fasync(&dev->async_queue,SIGIO,POLL_IN); } static ssize_t xxx_read(...) {  ...  完成读设备操作时发送信号  if(dev->async_queue)   kill_fasync...

static ssize_t xxx_write(...)
{
 ...
 echo "....">设备 完成写操作时发送信号
 if(dev->async_queue)
  kill_fasync(&dev->async_queue,SIGIO,POLL_IN);
}
static ssize_t xxx_read(...)
{
 ...
 完成读设备操作时发送信号
 if(dev->async_queue)
  kill_fasync(&dev->async_queue,SIGIO,POLL_OUT);
}
以上是驱动中的读写两个函数,在应用程序中都会获得SIGIO信号
signal(SIGIO,xxx);xxx为处理函数
我的问题是,如何在应用程序中区分到底是读完成后产生的SIGIO信号,还是写完成后产生的
求高手教下怎么在接受信号后把读写分开
例如,写完成后产生SIGIO信号,进入处理函数,经过什么判断知道是写完成,我们就进行读操作
反之一样

|
我觉得可以在驱动中设置一个布尔变量,表示是通知读还是写,再写一个比如ioctl函数来允许用户程序访问该变量。然后用户程序的信号处理函数在收到SIGIO时,通过ioctl检查该变量就可以知道是该读还是写了。当然这个变量可能在通知时又被新发生的读或写修改,这需要进行一些同步处理。
可以参照驱动和硬件之间的中断处理,在中断的上半部处理中,如果是共享中断号的设备,在发生中断时中断处理函数是无法通过传递来的参数识别出是哪个设备发生的中断,只知道是这几个设备中至少有一个发生了。识别方法就是,在中断处理函数中依次遍历这些设备,一般设备都会有一些状态寄存器标志是否有数据到来,是否发生中断等信息,访问这些寄存器就可以知道是否是这个设备发出的中断,这样查找直到发现某个设备发生中断。共享中断号就是把这么多的设备的中断进行分组,以便在中断发生时可以缩小查找范围,所有设备用一个中断线应该也可以,但每次都要全部遍历,代价很大。
在LZ的这个问题中,应用程序相当于驱动,驱动中的读和写就相当于两个共享中断号的硬件,异步通知相当于中断,布尔变量就相当于状态寄存器,类比一下就好理解了。

|
函数kill_fasync中参数POLL_IN表示可读,POLL_OUT表示可写。

|
可否采用select函数进行查询啊

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 知道TCP/UDP的包头,如何判断其应用层协议类型,struct tcphdr和 struct udphdr结构中那个变量能判断应用层协议类型。
  • 如何识别应用层协议???比如http,ftp,dns等
  • 新手问几个应用层实现的问题
  • linux C/C++应用层的开发
  • Java 数据库应用层 JDAL
  • 应用层组件框架 Brix
  • PPPD的应用层程序、、??
  • linux应用层如何select底层的中断
  • 应用层直接使用网络层
  • 输入子系统应用层设计迷惑
  • 底层硬件驱动如何调用应用层的回调函数,求指点!
  • 如何在应用层屏蔽 8259 键盘中断?
  • 用hook 函数,抓到了应用层的包,如何分析
  • 应用层malloc内存后,再free的话,内存不释放,而是在exit时释放,这个谁知道是怎么回事?
  • linux应用层调用kernel接口函数问题。
  • 问个问题,在平台设备(platform_driver)注册以后,在应用层如何调用呢?
  • Linux下的基于应用层协议的防火墙。
  • 应用层可以用signal发送消息通知其他进程,如果是想广播通知的话,怎么办?
  • 请教:如何能实现从内核层调用应用层的程序
  • 驱动程序(模块)怎样与应用层交互呀?也就是应用程序怎样控制驱动程序?让其做什么它就做什么。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3