下载此文档

异步通知fasync.doc


文档分类:论文 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
fasync( 在内核发生某个事情时向应用发信号, 应用需要把那个设备用 fcntl 改一下。) 分类: Linux 2012-04-10 09:35 739 人阅读评论(0) 收藏举报 struct buffer file semaphore kill user 分类: kernel 2009-12-19 18:20 735 人阅读评论(1) 收藏举报 fasync 的解释 fasync (fd , file , on) 当我们呼叫 fcntl() 系统呼叫, 并使用 F_SETFL 命令来设定档案的参数时, VFS 就会呼叫 fasync () 这个函式,而当读写档案的动作完成时,行程会收到 SIGIO 的讯息。=================================================================== ============== 首先,打开目标设备。第二,设置好目标设备的 SIGIO 信号处理程序。第三,需要通过 fcntl 系统调用,使当前进程变成文件的主人。(这样才能使文件中的信号发到当前进程) 第四,通过 ioctl 系统调用,将目标通道设置成异步操作模式。在驱动程序的 fops 中,有一个函数 int (*fasync)(int fd, struct file * file, int on); 在系统调用 sys_ioctl 的时候,会调用上面的 fasync 函数。例如,鼠标器的 int fasync_aux(int fd, struct file * filp, int on) { int retval; retval = fasync_helper(fd, filp, on, &queue->fasync); if (retval < 0) return retval; return 0; } 这里的 queue 类似于(struct mydev *)filp->private_data , fasync 则是里面的一个 fasyn c 队列。 fasync_helper 的作用是为当前进程创建一个 fasync_struct 数据结构,然后挂入目标设备的 fasync 队列。然后,在目标设备的常规驱动处理程序中,向该队列发送信号。例如,鼠标驱动器的 void handle_mouse_event(unsigned char scancode) (这类似于 usb 驱动中的 int urb ,一个回调函数) { ...... kill_fasync(&queue->fasync, SIGIO, POLL_IN); ...... } 即向每一个登记的进程发送 SIGIO 信号。本文来自 CSDN 博客,转载请标明出处: http://blog./walkingman321/archive/2008/03/09/ =================================================================== ============== 一个简单例子: #include <linux/> #include <linux/> #include <linux/> #include <linux/> #include <linux/> #include <linux/> #include <linux/> #include <asm/> #include <asm/> #include <asm-generic/> #define DEVICE_NAME "chardev" static int chardev_open(struct inode *inodp, struct file *filp); static ssize_t chardev_read(struct file *filp, char __user *buff, size_t count, loff_t *f_pos); static ssize_t chardev_write(struct file *filp, const char __user *buff, size_t count, loff_t *f_pos); static int chardev_fasync(int fd, struct file *filp, int mode); static int chardev_release(struct inode *inodp, struct file *filp); static stru

异步通知fasync 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数15
  • 收藏数0 收藏
  • 顶次数0
  • 上传人63229029
  • 文件大小90 KB
  • 时间2017-05-04