Rust 不带划线器的标准件

Rust 不带划线器的标准件,rust,Rust,为什么std::io::stdout()使用LineWriter返回stdout 没有LineWriter,我们如何获得stdout 这里有一个关于不安全代码的问题,但为什么没有简单的方法来解决呢?很多为什么问题往往不是好问题,因为如果没有明确记录的理由,它们会引起猜测。我找到的最接近的消息来源是在中的讨论。在各种情况下,人们对它的好处和性能都有一些怀疑,对它的行为也有很多疑问。我个人认为,当前的Stdout实现为人们期望的行为提供了很多很好的保证(包括刷新行为和多线程行为)。如果您发现自己受

为什么
std::io::stdout()
使用
LineWriter
返回stdout

没有
LineWriter
,我们如何获得
stdout


这里有一个关于不安全代码的问题,但为什么没有简单的方法来解决呢?

很多为什么问题往往不是好问题,因为如果没有明确记录的理由,它们会引起猜测。我找到的最接近的消息来源是在中的讨论。在各种情况下,人们对它的好处和性能都有一些怀疑,对它的行为也有很多疑问。我个人认为,当前的Stdout实现为人们期望的行为提供了很多很好的保证(包括刷新行为和多线程行为)。如果您发现自己受到行缓冲的阻碍,您可以使用特定于操作系统的功能按照您的意愿对其进行调整,如在提供的一个实现中。因为目前rust开发人员已决定不尝试根据外部信息(例如标准输出的类型)推断应使用哪种缓冲策略,也不提供可配置的流(
setvbuf
)。正如@kmdreko的链接所示,这是一个已知的缺陷。
    use std::os::unix::io::FromRawFd;
    let stdout = unsafe { std::fs::File::from_raw_fd(1) };
    let mut writer = std::io::BufWriter::with_capacity(2, stdout);
    writer.write(b"S").unwrap();