从linux驱动程序传递信号到用户应用程序

时间:2016-03-17 09:06:05

标签: linux

我的问题是使用send_sig_info和sigaction函数,以便将信号从驱动程序传递给用户应用程序以发出中断信号。目前我的代码如下:

//in driver's interrupt handler function
ret = send_sig_info(SIGNAL_NUMBER, &info, t); 

//in user application
struct sigaction sig;
sig.sa_sigaction = read_proc;
sig.sa_flags     = SA_SIGINFO;
sigaction(SIGNAL_NUMBER, &sig, NULL);

其中read_proc是来自用户应用程序的处理函数。我现在正在尝试修改代码,以便多次中断不同的信号编号将被发送到用户应用程序,以便它的相应处理程序将被调用如下:

//in driver handler 1
info.si_int   =info.si_int+1;
//set the appropriate signal number
info.si_signo = SIGNAL_NUMBER;
ret = send_sig_info(SIGNAL_NUMBER, &info, t); 

//in drivers handler 2
info.si_int   =info.si_int+1;
//set the appropriate signal number
info.si_signo = SIGNAL_NUMBER2;
ret = send_sig_info(SIGNAL_NUMBER2, &info, t); 

并在用户应用程序端

struct sigaction sig;
sig.sa_sigaction = read_proc;
sig.sa_flags     = SA_SIGINFO;
sigaction(SIGNAL_NUMBER, &sig, NULL);

//sigaction for other buffers
struct sigaction sig2;
sig.sa_sigaction = read_proc2;
sig.sa_flags     = SA_SIGINFO;
sigaction(SIGNAL_NUMBER2, &sig2, NULL);

但是在这种情况下,不调用函数read_proc2。任何人都可以建议正确的解决方案,以便根据不同的si_signo在用户应用程序端调用不同的函数吗?

此致

0 个答案:

没有答案