linux下异步通知

tech2023-06-20  108

应用层

extern __sighandler_t signal (int __sig, __sighandler_t __handler)

设置某个信号的中断函数

extern int fcntl (fd,F_SETOWN,getpid());

设置设备文件的拥有者为本进程,这样一来才能收到设备驱动发出的SIGIO信号。

flag = fcntl(fd,F_GETFL);

获取旧的文件标志

fcntl(fd,F_SETFL,flag|FASYNC);

使设备文件支持异步通知,即设置FASYNC标志。此函数会触发驱动程序中的fasync函数

驱动层

实现file_operation中的.fasync

static int fasync (int fd, struct file *file, int on)

{

struct chr_dev *dev = file->private_data;

printk("asd\r\n");

return fasync_helper(fd,file,on,&dev->fasync_queue);//插入到异步通知链

}

kill_fasync(&dev->fasync_queue,SIGIO,POLL_IN);

向应用层发出SIGIO信号

最新回复(0)