下面的 Rust 程序stdout
在atexit
处理程序中访问时会发生恐慌。
extern crate libc;
extern "C" fn bye() {
println!("bye");
}
fn main() {
println!("hello");
unsafe { libc::atexit(bye) };
}
输出:
hello
thread '<main>' panicked at 'cannot access stdout during shutdown', ../src/libcore/option.rs:298
fatal runtime error: Could not unwind stack, error = 5
An unknown error occurred
在我看来,这个注册应该在我们的atexit
注册之前运行,所以处理程序中的这一行应该只在我们的自定义处理程序之后运行。因此它不应该恐慌。