gpt4 book ai didi

rust - 为什么 atexit 处理程序在访问 stdout 时会出现 panic ?

转载 作者:行者123 更新时间:2023-11-29 07:52:56 25 4
gpt4 key购买 nike

下面的 Rust 程序在访问 atexit 处理程序中的 stdout 时会崩溃。

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

在我看来this registration应该在我们的 atexit 注册之前运行,所以 this line在处理程序中应该只在我们的自定义处理程序之后运行。因此它不应该 panic 。

最佳答案

你混淆了你调用的 libc::atexitsys_common::at_exit(在 src/libstd/sys/common/mod.rs 中)您的链接指向哪些 Rust 在早期清理期间调用。

这是两个不同的清理队列,我不想依赖它们按特定顺序执行。

关于rust - 为什么 atexit 处理程序在访问 stdout 时会出现 panic ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980148/

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