gpt4 book ai didi

rust - 关闭标准输出或标准输入

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

由于文件和流在被删除时会自动关闭,但是 io::stdin() 只提供底层流的句柄,所以我看不到如何显式关闭 stdinstdout 或在我的程序中检测 stdin 上的 EOF。

考虑

fn main() {
let mut stdin = io::stdin();
let mut linebuffer = String::new();
loop {
match stdin.read_line(&mut linebuffer) {
Ok(i) if i == 0 => { break; },
Ok(i) => {
println!("{} {}", linebuffer, i);
},
Err(e) => { panic!(e); }
}
linebuffer.clear();
}
}

检查放入缓冲区的字节数似乎不稳定,因为管道可能会被写入零字节刷新。从关闭的 stdin 中读取应该会导致 IOError,但事实并非如此。

有点相关:How to explicitly close my own stdout/stderr?

最佳答案

前段时间有 ErrorKind::EndOfFile 枚举变体,它是在源流关闭时在读取操作时发出的。它似乎没有达到新的 I/O 库实现,而是 Read 特性已更改为在 EOF 时返回 0 个读取字节。事实上,这是 specified在 I/O 改革 RFC 中。所以是的,检查零是检测当前 Rust 流结束的有效方法。

顺便说一句,你可以写Ok(0)而不是Ok(i) if i == 0:

match stdin.read_line(&mut buf) {
Ok(0) => break,
...
}

至于如何关闭stdout()/stderr(),目前的API好像没有提供方法,很遗憾。它可能是一个值得 RFC 或至少是 RFC 问题的功能。

关于rust - 关闭标准输出或标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30776520/

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