我试图写一个小的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
答案 0 :(得分:3)
正如文档所述,File::open
以只读模式打开文件。
当你尝试写作时,你正在写BufWriter
,这总是成功的。一旦你flush
,你忽略了Result
,这意味着即使写入失败(由于它是只读的),你也会忽略该错误。
OpenOptions
允许您同时以读写模式打开文件。请注意,同时读取和写入会产生奇怪的后果,例如在第一次写入后读取无法生成任何内容,因为写入替换整个文件而不是插入/附加写入