LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1029|回复: 2

我想通过signal在除以0的时候调用相应的函数,但是为什么不行?

[复制链接]
发表于 2006-9-24 03:22:22 | 显示全部楼层 |阅读模式
我通过跟踪调试发现程序接受到了signal SIGFPE,但是为什么没有调用noteerr函数呢?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

void noteerr(int signo)
{
  printf("error\n");
  printf("Receive signal %d\n",signo);
  exit(1);
}

int main(void){
        struct sigaction act;
        act.sa_handler = noteerr;
        act.sa_flags = 0;
        sigemptyset(&act.sa_mask);
       
        sigaction(SIGFPE,&noteerr,NULL);
       
        int i = 8/0;
        printf("%d\n",i);
        return 0;
}
 楼主| 发表于 2006-9-24 03:52:45 | 显示全部楼层
这样写就好了,不知道上面的代码为什么就不行
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

void noteerr(int signo)
{
  printf("error\n");
  printf("Receive signal %d\n",signo);
  exit(1);
}

int main(void){
        signal(SIGFPE,noteerr);
       
        int i = 8/0;
        printf("%d\n",i);
        return 0;
}
回复 支持 反对

使用道具 举报

发表于 2006-9-24 12:23:09 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <signal.h>
  5. void noteerr(int signo)
  6. {
  7. printf("error\n");
  8. printf("Receive signal %d\n",signo);
  9. exit(1);
  10. }
  11. int main(void){
  12. struct sigaction act;
  13. act.sa_handler = noteerr;
  14. act.sa_flags = 0;
  15. sigemptyset(&act.sa_mask);
  16. sigaction(SIGFPE,&noteerr,NULL); // [color="Red"]sigaction(SIGFPE,&act,NULL); [/color]
  17. int i = 8/0;
  18. printf("%d\n",i);
  19. return 0;
  20. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表