- 论坛徽章:
- 0
|
我在用户态写了一个守护进程,当得到SIGIO时执行opentty_handler,打开一个tty设备,
守护进程接收信号如下:
if ((fd = open("/dev/mactelnet", O_RDWR,S_IRUSR|S_IWUSR)) < 0) {
bb_perror_msg_and_die("mactelnet");
}else{
#if 1
int oflags;
signal(SIGIO,opentty_handler);
fcntl(fd,F_SETOWN,getpid());
oflags = fcntl(fd,F_GETFL);
fcntl(fd,F_SETFL,oflags |FASYNC);
while(1); //等待内核态信号
#endif
}
内核发送信号如下:
kill_fasync(&dev->async_queue,SIGIO,POLL_OUT);
信号可以收到也能正常工作,但有问题 1)while占用cpu大量的资源,一定是不可行的,寻找改进的方法:
2)kill_fasync可不可以发除SIGIO以外的信号?,可不可自定义,如何在内核中自定义?
请有思路人指点一下 |
|