免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1398 | 回复: 1
打印 上一主题 下一主题

一个字符设备异步signal的问题,高手请! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-03 12:02 |只看该作者 |倒序浏览
我在用户态写了一个守护进程,当得到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以外的信号?,可不可自定义,如何在内核中自定义?
请有思路人指点一下

论坛徽章:
0
2 [报告]
发表于 2009-07-03 16:24 |只看该作者

回复 #1 s.t_seeyou 的帖子

没人顶啊,试了一下,
do{sleep(10000000);
   }while(1);
终于可以降下来了,但不知道有没有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP