在POSIX兼容的平台上,SIGFPE是当一个进程执行了一个错误的算术操作时发送给它的信号。SIGFPE的符号常量在头文件signal.h
中定义。因为在不同平台上,信号数字可能变化,因此常使用信号名称。
是信号名的通用前缀。是(浮点异常)的首字母缩略字。产生SIGFPE信号时并非一定要涉及浮点算术,之所以不修改名字是因为这么做会破坏向下兼容性。
导致SIGFPE被发送给进程的原因有很多。一个常见的例子是由于一个意外输入导致的溢出,或者在程序构造中的错误。
SIGFPE可以被处理。也就是说,程序员可以指定他们在接收到信号时想要的动作,例如调用一个子程序,忽略事件等。
在特定情形下,忽略SIGFPE可能导致程序出现意料之外的行为,包括但不限于由于不断重试违规操作而导致程序挂起。但是,忽略并非由计算造成的SIGFPE信号是安全的,例如通过kill
系统调用发送的那些。
一个通常的疏忽是认为除以零是SIGFPE的唯一来源。在一些架构上(包括IA-32),使用INT_MIN(最小的可以被表示的负整数值)除以-1的整数除法也会触发这个信号,因为商是一个无法被表示的正数。(比如8位有符号整数可以表示-128、+127和它们之间的整数。-128÷-1=+128 > +127,因此无法被表示而产生溢出并触发此信号)
这是一个尝试执行一个称为整数除以零,或的错误算术运算的ANSI C程序的例子。
int main(){ int x = 42/0; return 0; /* Never reached */}
在一个运行Linux的IA-32上编译运行,产生下列内容:
$ gcc -o sigfpe sigfpe.csigfpe.c: In function ‘main’:sigfpe.c:3: warning: division by zero$ ./sigfpeFloating point exception (core dumped)
一个来自gdb的栈跟踪显示在main
函数中发生了SIGFPE信号:
Program received signal SIGFPE, Arithmetic exception.0x08048373 in main ()
参考
- ^ sourceware.org Git - glibc.git/blob - bits/signum.h. 2001-07-06 .
参阅
计算机信号 |
---|
| POSIX | SIGABRT · SIGALRM · SIGFPE · SIGHUP · SIGILL · SIGINT · SIGKILL · SIGPIPE · SIGQUIT · SIGSEGV · SIGTERM · SIGUSR1 · SIGUSR2 · SIGCHLD · SIGCONT · SIGSTOP · SIGTSTP · SIGTTIN(英语:SIGTTIN) · SIGTTOU · SIGBUS · SIGPOLL · SIGPROF · SIGSYS · SIGTRAP · SIGURG(英语:SIGURG) · SIGVTALRM · SIGXCPU · SIGXFSZ · SIGIOT · SIGEMT · SIGSTKFLT · SIGIO · SIGCLD · SIGINFO · SIGPWR · SIGLOST · SIGWINCH · SIGUNUSED
相关- 巴洛克巴洛克艺术(意大利语:Barocco,英语:Baroque,法语:Baroque)是欧洲17世纪时的一种艺术风格,运用夸张的运动性和清晰可辨的细节在雕塑、绘画、建筑、文学、舞蹈和音乐等领域来营造戏剧
- 导热热传导,是热能从高温向低温部分转移的过程,是
一个分子向另一个分子传递振动能的结果。各种材料的热传导性能不同,传导性能好的,如金属,还包括了自由电子的移动,所以传热速度快,可
- 库贾氏症克罗伊茨费尔特-雅各布病(英语:Creutzfeldt-Jakob disease,简称CJD),或称克-雅氏症、克-雅氏病、克雅二氏症、克雅二氏病、库雅氏症、库贾氏症、克雅氏症、克雅氏病,是一种发生在
- 圣贝尼托县圣贝尼托县(San Benito County, California)是美国加利福尼亚州的一个县,位于太平洋海岸山脉。面积3,605平方公里,根据美国2000年人口普查数字,共有人口53,234人。县治霍利斯特(Ho
- 凯洛诉新伦敦市案凯洛诉新伦敦市案(Susette Kelo, et al. v. City of New London, et al.),545 U.S. 469 (2005),是美国联邦最高法院判决的一起关于政府是否可以经济发展为理由征用私有财产并转
- 迈克尔·阿廷迈克尔·阿廷(Michael Artin,1934年6月28日-),是一名美国数学家、麻省理工学院数学系退休教授。他因代数几何的贡献 而被视为在其领域的杰出教授之一。阿廷出生于德国汉堡市,并在
- 医学总会 (英国)医学总会(英语:General Medical Council,缩写作 GMC)是英国一个收费的注册慈善团体,根据《1858年医学法令》成立,拥有法定义务管有英国执业医生的登记名册。医学总会也负责管制英
- 卡亚·埃德姆伊斯梅特·卡亚·埃德姆(土耳其语:İsmet Kaya Erdem,1928年-),土耳其卡拉比克政治人物,曾担任土耳其财政部长和大国民议会议长。
- 佐竹义宣佐竹义宣(1570年8月17日-1633年3月5日)是日本战国时代至江户时代初期的武将和大名。佐竹氏第19代当主。出羽国久保田藩初代藩主。父亲是佐竹义重。母亲是伊达晴宗的女儿,因此与
- 克里米亚的意大利人意大利人,是克里米亚的少数族群。早在罗马帝国,热那亚共和国和威尼斯时代,已有意大利人生活在乌克兰南部和克里米亚。一些来源证实,在18世纪末的敖德萨,十个居民中的一个是意大利
|
---|
|