gpt4 book ai didi

rust - 写入 BufWriter 的字节实际上并未写入

转载 作者:行者123 更新时间:2023-11-29 08:34:36 28 4
gpt4 key购买 nike

我正在尝试编写一个小的 Rust 程序,将/dev/ttyS0 上的行回显给发件人:

fn echo_loop(device: &str) {
let f = File::open(device).unwrap();
let read = BufReader::new(&f);
let mut writer = BufWriter::new(&f);

read.lines().for_each(|l: Result<String, Error>| match l {
Ok(line) => {
let _ = writer.write(line.as_bytes()).unwrap();
let _ = writer.flush();
println!("We should have written: {}", line);
},
Err(err) => println!("Err!: {:?}", err)
});
}

为了测试这段代码,我用 "/dev/tty" 调用函数作为它的论点。

我希望能够在控制台上键入在我按 return 后得到回显的行,但我没有得到回显(除了我用 println!(…) 宏打印的内容) .

读取行的部分似乎有效,否则我不能println!我键入的内容,但为什么我没有通过写入 writer 得到回显? ?

这是我的代码的输出(注意:“Hello world!”和“That's what I get :-(”是我输入的文本,不是程序的输出):

Hello world!
We should have written: Hello world!
That's what I get :-(
We should have written: That's what I get :-(

最佳答案

如文档所述,File::open 以只读模式打开文件。

当您尝试写入时,您正在向 BufWriter 写入,它总是会成功。 flush 后,您将忽略 Result,这意味着即使写入失败(它失败了,因为它是只读的),您也将忽略该错误。

OpenOptions允许您同时以读写模式打开文件。请注意,同时读取和写入可能会产生奇怪的后果,例如在第一次写入后读取无法产生任何结果,因为写入替换整个文件而不是插入/附加您的写入

关于rust - 写入 BufWriter 的字节实际上并未写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410346/

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