gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:07:54 24 4
gpt4 key购买 nike

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

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

参见 this function有关设置回调以在 C 中运行的示例。

最佳答案

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

有一些 crate 可用于处理信号; 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)

关于rust - 如何使用 Rust 处理浮点异常 (fpe)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40857359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com