wgs13579 发表于 2010-05-29 11:47

[求助]关于阻塞型IO和休眠驱动

小弟在测试中有以下代码: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,这是为什么呢?
页: [1]
查看完整版本: [求助]关于阻塞型IO和休眠驱动