免费注册 查看新帖 |

Chinaunix

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

信号调用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-13 14:26 |只看该作者 |倒序浏览
不知道发在哪个模块好。
unp中举了很多例子,都用到了信号处理函数。我不是很明白为啥在程序结束时,还需要“恢复原来的信号处理函数”

static void connect_alarm(int);

int
connect_timeo(...)
{
     Signfunc  *sigfunc;
      int n;
      
      sigfunc = Signal(SIGLARM, connect_alarm);   //这里我理解是设置信号处理函数
      if ( (n = connect(sockfd, saptr, salen)) < 0) {
            close(sockfd);
           if(errno == EINTR)                              
              errno = ETIMEDOUT;                        
      }
     alarm(0);

     SIgnal(SIGLARM,sigfunc);                           //为啥这里还要"恢复原来的信号处理函数"。程序都结束了,设置还有什么特殊的用途吗?
                                                                    //就算是恢复原来的,应该再次调用:Signal(SIGLARM, connect_alarm);   
   return (n);
}

static void
connect_alarm(int signo)
{
     return;
}

论坛徽章:
1
白羊座
日期:2013-08-22 17:30:33
2 [报告]
发表于 2012-04-13 14:38 |只看该作者
sigfunc = Signal(SIGLARM, connect_alarm);  设置SIGALRM信号的捕捉函数,并保存原先的SIGALRM信号操作到sigfunc
执行完中间代码段后,再通过SIgnal(SIGLARM,sigfunc);还原回去!
应该没有什么问题吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP