fasync

为了使设备支持异步通知机制,驱动程序中涉及以下3项工作:
1、支持F_SETOWN命令,能在这个控制命令处理中设置 filp->f_owner为对应进程ID。不过此项工作已由内核完成,设备驱动无须处理。

2、支持F_SETFL命令的处理,每当FASYNC标志改变时,驱动程序中的fasync()函数将得以执行。驱动中应该实现fasync()函数。该函数会调用到fasync_helper()来初始化 / 释放 fasync_struct 结构体。

3、在设备资源可获得时,调用kill_fasync()函数激发相应的信号。一般kill_fasync()函数是在中断函数中被调用的,即发生中断后发送信号通知应用程序。

应用程序则针对驱动做以下三项工作:
1、接收信号并设置处理函数 ,例如:

signal(SIGIO,handler);    //SIGIO 是接收的信号,其值为29;handler是处理函数。不清除可以man一下这个函数。

2、告诉内核,发给哪个进程

fcntl(fd,F_SETOWN,getpid());

3、即改变fasync标记,触发fasync驱动程序

int Oflags =  fcntl(fd,F_GETFL);  //获取标记
fcntl(fd,F_SETFL,Oflags | FASYNC);//重置标记,即改变fasync标记,最终会调用到驱动的faync > fasync_helper:初始化/释放fasync_struct
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值