- 论坛徽章:
- 0
|
小弟在测试中有以下代码:- void sighandler(int signo)
- {
- if (signo==SIGIO)
- gotdata++;
- return;
- }
- int main(int argc, char **argv)
- {
- struct sigaction action;
- if ((pipetest0 = open("/dev/scullpipe0",O_RDONLY)) < 0) {
- printf("open scullpipe0 error! \n");
- exit(1);
- }
- memset(&action, 0, sizeof(action));
- action.sa_handler = sighandler;
- action.sa_flags = 0;
- sigaction(SIGIO, &action, NULL);
- fcntl(pipetest0, F_SETOWN, getpid());
- fcntl(pipetest0, F_SETFL, fcntl(pipetest0, F_GETFL) | FASYNC);
- sleep(86400);
复制代码 在上面的函数中,更改打开文件的所有者,并且设置FASYNC标志,将钩子函数sighandler赋值给action结构体成员,然后睡眠。
而在驱动程序中,有如下一句代码:- kill_fasync(&dev->async_queue, SIGIO, POLL_IN);
复制代码 发送给设备文件所有者一个SIGIO信号,唤醒测试程序所在进程,并且会调用钩子函数sighandler,根据发送的信号,来使gotdata加一,
但这个时候遇到问题了,就是在驱动程序的kill_fasync()函数中,无论我发送什么信号,gotdata都会加一,意思就是说,无论我在kill_fasync()函数中怎么修改信号者,传递给钩子函数的sighandler()的信号,都是SIGIO,这是为什么呢? |
|