以下の 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
ため、ハンドラーのこの行はカスタム ハンドラーの後にのみ実行する必要があります。したがって、パニックに陥ることはありません。