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

时间:2017-11-21 10:07:54

标签: rust

我试图写一个小的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 之后在控制台上输入回显的行,但是我没有得到回音(除了我用{{打印的内容) 1}}宏。

读取这些线条的部分似乎有效,否则我无法println!(…)我输入的内容,但为什么不通过写入println!来获得回声?

这是我的代码的输出(注意:“你好世界!”和“那是我得到的:-(”是我输入的文字,而不是程序的输出):

writer

1 个答案:

答案 0 :(得分:3)

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

当你尝试写作时,你正在写BufWriter,这总是成功的。一旦你flush,你忽略了Result,这意味着即使写入失败(由于它是只读的),你也会忽略该错误。

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

相关问题