今天在处理除数为0的时候的信号问题,发现了一个问题,暂时没有找到答案.
现象一:
代码如下:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#define LOG($STR) printf("[%s %s %d]:[%s]\n",__FILE__,__func__,__LINE__,$STR)
void myhandle()
{
LOG("myhandle");
}
int main()
{
int fd,i;
signal(SIGFPE,myhandle);
char path[]="./test.txt";
LOG("测试");
double li=0;
double f=90;
f= f/li;
LOG("测试");
return 0;
}
运算类型如果是double型的话不发出SIGFPE信号,至少是程序运行的时候没有捕捉到此信号.
现象二:
如果上段代码的f和li类型修改成int型,那么会捕捉到SIGFPE信号,但是会一直死循环到信号处理函数内。
应该是浮点型的数据不会为0,所以虽然是0.00但是计算机内其实不是0,故而没有没有0