异步通知机制

异步通知机制的作用是,可以让驱动通知应用去读取数据。

进程间发信号用:kill -信息 PID(进程号)

        PID(进程号)可在终端用ps查询

驱动中:

static struct fasync_struct *button_async;
file_operations:
        .fasync  =  sixth_drv_fasync
static int sixth_drv_fasync (int fd, struct file *filp, int on)
{
    printk("driver: sixth_drv_fasync\n");
    return fasync_helper (fd, filp, on, &button_async);    //初始化button_async结构体
}
kill_fasync (&button_async, SIGIO, POLL_IN);//发送信息SIGIO给应用程序

应用程序中:

signal(SIGIO, my_signal_fun);//接收到SIGIO就执行my_signal_fun
fcntl(fd, F_SETOWN, getpid());//告诉驱动它的PID
Oflags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, Oflags | FASYNC);//改变fasync标记,最终会调用到驱动的fasync>fasync_helper:初始化/释放fasync_struct
signal(参数1,参数2);
参数1:我们要进行处理的信号。系统的信号我们可以再终端键入 kill -l查看(共64个)。其实这些信号时系统定义的宏。
参数2:我们处理的方式(是系统默认还是忽略还是捕获)

猜你喜欢

转载自www.cnblogs.com/threegold/p/9356434.html