异步通知fasync在linux驱动和应用程序中编程步骤概括

异步通知fasync的编程牵涉到驱动和应用程序的联动,稍显复杂。现概括如下:

 

应用程序      

 1,fcntl(fd, F_SETOWN, getpid());//指定一个文件为属主,与驱动程序联系起来
2,Oflags = fcntl(fd, F_GETFL); //取得open时代文件标志符        
3,fcntl(fd, F_SETFL, Oflags | FASYNC); //每当FASYNC标志状态改变时,linux设备驱动程序中的fasync()函数将得以执行。
4,signal(SIGIO, my_signal_fun);//底层驱动发上来SIGIO的信号,然后调用my_signal_fun

 

驱动程序

1,定义一个fasync_struct 类型的变量
2,在fops中增加要使用的函数,.fasync = xxx_fasync,并实现这个函数
3,调用fasync_helper进行初始化,return fasync_helper (fd, filp, on, &button_async)
4,在需要发信号的地方使用kill_fasync (&button_async, SIGIO, POLL_IN);
5,在release中,从异步通知列表中删除该flip,fasync(-1,filp,0)

你可能感兴趣的:(笔记,linux,linux)