处理SIGPFE信号后如何恢复?

时间:2018-02-24 07:09:29

标签: c signals libc

我有这个简短的c程序,它会导致一个SIGPFE并尝试处理它:

#include <stdio.h>
#include <signal.h>

void catch_floating_point_error(int signal_number) {
  printf("I caught a floating point error\n");
}

int main() {
   signal(SIGFPE, catch_floating_point_error);

   for (signed int i = -3; i<=3; i++) {
     printf ("30 / %d = %d\n", i, 30/i);
   }
}

当我编译并执行该程序时,它会打印

30 / -3 = -10
30 / -2 = -15
30 / -1 = -30
I caught a floating point error
I caught a floating point error
I caught a floating point error
...

直到我用ctrl-c终止进程。

我预计在执行信号处理程序catch_floating_point_error之后导致FPE的指令之后执行一条指令会恢复程序。

显然情况并非如此。似乎该程序再次重新执行失败的指令。

那么,当我收到有SIGFPE的通知时,如何跳过失败的插入?

0 个答案:

没有答案