如何使用Rust处理浮点异常(fpe)?

时间:2016-11-29 03:37:59

标签: rust

在C中,您可以使用SIGFPE为浮点异常定义处理程序。

如何使用Rust来定义处理溢出的函数,例如?

请参阅this function以获取设置回调以在C中运行的示例。

1 个答案:

答案 0 :(得分:2)

Rust不支持信号作为标准库的一部分。我相信这是因为它们是高度特定于平台的,并且非常适合大多数多线程程序。

有一些箱子可以处理信号; chan-signal是我之前使用的那个。以下是该库中的示例代码,已更改为报告SIGFPE

#[macro_use]
extern crate chan;
extern crate chan_signal;

use chan_signal::Signal;
use std::thread;

fn main() {
    let signal = chan_signal::notify(&[Signal::FPE]);
    let (sdone, rdone) = chan::sync(0);

    thread::spawn(move || run(sdone));

    chan_select! {
        signal.recv() -> signal => {
            println!("received signal: {:?}", signal)
        },
        rdone.recv() => {
            println!("Program completed normally.");
        }
    }
}

fn run(_sdone: chan::Sender<()>) {
    thread::sleep_ms(100_000);
}

在macOS上,在一个窗口中运行它并在另一个窗口中运行kill -s FPE $THE_RUNNING_PID会生成输出

received signal: Some(FPE)