基于字符设备驱动之中断按键来进行分析字符设备驱动的另一种技巧:异步通知--一种可以让驱动程序变的很主动的方法
一、目标:
按键按下时,驱动层序主动通知应用程序有数据可读,这样就不用应用程序老是自己主动去读数据,专心做自己的事,该来的不用去请都会自己送上门来,瞬间就高大上起来啦
要思考的问题:
①注册信号处理函数
②谁发信号?内核驱动
③发给谁?APP。前提是App要告诉驱动它的PID
./fasync &a
一、目标:
按键按下时,驱动层序主动通知应用程序有数据可读,这样就不用应用程序老是自己主动去读数据,专心做自己的事,该来的不用去请都会自己送上门来,瞬间就高大上起来啦
要思考的问题:
①注册信号处理函数
②谁发信号?内核驱动
③发给谁?APP。前提是App要告诉驱动它的PID
④怎么发?kill_fasync()函数
二、首先在ubuntu上感受一下这种服务:
(1)man signal 查看signal函数的使用方法:
SYNOPSIS
#include <signal.h>
typedef void (*sighandler_t)(int);//sighandler_t是一种函数指针,他的返回值为void型,参数是int
sighandler_t signal(int signum, sighandler_t handler);
DESCRIPTION
signal() sets the disposition of the signal signum to handler, which is
either SIG_IGN, SIG_DFL, or the address of a programmer-defined function (a
"signal handler").
意思是:signal函数是把sigunm值传给handler函数的,定义的handler函数要接收一个参数signum
(2)程序内容:fasync_tesc.c文件
//编译指令:gcc -o fasync fasync_test.c
#include <stdio.h>
#include <signal.h>
void sig_handle(int signum) //信号值
{
printf("Running in sig_handle\n");
}
int main()
{
signal(SIGUSR1,sig_handle);
while(1)
{
sleep(1000);
}
return 0;
}
(3)运行程序&发送信号./fasync &a