Linux 异步通知

Linux 异步通知

阻塞和非阻塞方式都是采取应用程序主动读取数据的方式。最好的方式是驱动程序主动向应用程序发出通知,报告自己可以被访问,然后应用程序从驱动程序中读取或写入数据,类似于中断,这就需要使用异步通知这个机制来完成此功能。

异步通知使用信号通知,来模拟硬件上使用的中断,只不过信号是软件层面上的。

//信号处理函数
sighandler_t signal(int signum, sighandler_t handler)
//要设置处理函数的信号
signum 
//信号的处理函数
handler

驱动层信号处理

1 定义fasync_struct结构体指针变量
2 在file_operations操作集中实现注册信号函数fasync()
  在file_operations操作集release函数中实现释放信号函数fasync_struct()
3 在驱动程序中编写需要发送的信号函数kill_fasync()

应用层信号处理

1 注册信号处理函数
sighandler_t signal(int signum, sighandler_t handler)
2 将本应用程序的进程号告诉内核
使用 fcntl(fd, F_SETOWN, getpid())将本应用程序的进程号告诉给内核。
3 开启异步通知
flags = fcntl(fd, F_GETFL); /* 获取当前的进程状态 */
fcntl(fd, F_SETFL, flags | FASYNC); /* 开启当前进程异步通知功能 */

版权声明:本文为qq_42952079原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。