我想编写一个自定义信号处理程序函数,该函数可以确定哪种类型的浮点异常已生成了SIGFPE信号。
我尝试使用信号和sigaction函数。
这是我的示例程序,使用信号功能捕获SIGFPE。
#include <stdio.h>
#include <math.h>
#include <signal.h>
int flag = 0;
void sig_handler(int signo)
{
if (signo == SIGFPE)
flag = 1
}
int main()
{
//feclearexcept(FE_ALL_EXCEPT);
//printf("%d\n", fegetexcept());
printf("%f\n", sqrt(-1));
signal(SIGFPE, sig_handler);
if(fetestexcept(FE_INVALID))
{
raise(SIGFPE);
}
return 0;
}
注意:我在RISC-V体系结构上工作时,不能使用fenv.h中定义的功能。
编译器版本:riscv64-unknown-elf-gcc(GCC)8.2.0