首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得更多关于SIGFPE信号的信息?

如何获得更多关于SIGFPE信号的信息?
EN

Stack Overflow用户
提问于 2015-06-03 18:44:14
回答 2查看 2K关注 0票数 3

这是来自的GNU图书馆参考手册

int SIGFPE SIGFPE信号报告一个致命的算术错误。这个信号实际上涵盖了所有算术错误,包括除以零和溢出。 BSD系统为SIGFPE处理程序提供了一个额外的参数,用于区分异常的各种原因。为了访问此参数,必须定义处理程序以接受两个参数,这意味着必须将其转换为单参数函数类型,以便建立处理程序。

但是,没有关于如何访问额外参数的示例。

我做了我的谷歌工作,但什么也找不到。

我怎样才能得到这些额外的信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-03 18:54:56

正如注释中所提到的,更好的方法是使用sigactionSA_SIGINFO标志安装信号处理程序,然后在第二个参数(siginfo_t类型)的si_code字段中确定发生了哪些浮点错误:

对于一个si_code信号,可以在SIGFPE中放置以下值: FPE_INTDIV整数除以零。 FPE_INTOVF整数溢出。 FPE_FLTDIV浮点除以零. FPE_FLTOVF浮点溢出. FPE_FLTUND浮点底流. FPE_FLTRES浮点不精确结果。 FPE_FLTINV浮点无效操作. FPE_FLTSUB子脚本超出范围。

来源:Linux sigaction(2)手册页

同样的列表在FreeBSD siginfo手册页上也很容易获得。

票数 4
EN

Stack Overflow用户

发布于 2015-06-03 19:27:01

glibc所指的信息是一个历史机制,是不可移植的。在FreeBSD上,西格维克(2)手册页面包含一个符号,它仅在VAX-11体系结构中被支持:

在VAX-11上,可以声明处理程序例程: void处理程序( sig,code,scp) int sig,code;struct *scp; 这里,sig是信号号,硬件故障和陷阱被映射到其中,如下所定义。代码参数要么是下面给出的常量,要么是硬件提供的兼容性模式错误(兼容性模式故障通过在PSL_CM中设置来区别于其他SIGILL陷阱)。scp参数是指向σ上下文结构(在<signal.h>中定义)的指针,用于从信号之前恢复上下文。

映射列表实际上没有在此版本的手册中提供。它可以在4.3BSD-Reno信号(3)手册中找到。值得注意的是,这篇文章已经有25年历史了。

在现代系统中,您应该使用sigaction机制,它的定义和可移植性都要好得多。

错误-这个手册页仍然令人困惑。

的确如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30628167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档