我的问题是使用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在用户应用程序端调用不同的函数吗?
此致