管道过滤器是在unix管道之间删除的程序:source | filter | sink
。我希望它尽可能少地缓冲,并在处理过程中处理,而不是阅读所有内容,只开始处理EOF
上的数据。
我是Rust的新手,这是一个学习项目。整个管道过滤器的目的是让我在命令行上使用字符串处理的脚手架,并且需要从conky获取未经过清理的JSON并为i3bar清理它。
这就是我所拥有的。它不进行任何处理,只应将stdin转储到stdout。
我不确定read_line()
是否会阻塞,直到找到换行符,以及如何检查它是否返回了我可以使用的内容。我知道它会返回IoResult
,但我无法找到如何对其进行匹配。似乎在这种情况下使用try!
宏,但我不确定如何。
当它到达sleep()
电话时,它似乎无限期地睡眠。
use std::io;
use std::io::timer;
use std::time::Duration;
fn main() {
let mut reader = io::stdin();
let interval = Duration::milliseconds(1000);
let mut line;
loop {
line = reader.read_line();
print!("{}", line);
timer::sleep(interval);
}
}
答案 0 :(得分:1)
你已经在这里塞了3个(或更多)单独的问题......
我不确定read_line()是否会阻塞,直到找到换行符。
docs for read_line在这一点上并不具体,但我认为它不会返回,直到它能够读取整行(或有错误)。
如何检查是否返回了我可以使用的内容。我知道它会返回一个IoResult,但我还没有找到如何对付它。
IoResult基本上是Result
的另一个名称,这是一个普通的enum
。您可以像这样匹配:
match io_method() {
Ok(_) => thing_1(),
Err(_) => thing_2(),
}
通常,您可以使用Ok
和Err
中的值执行有用的操作。
似乎是尝试!在这种情况下使用宏,但我不确定如何。
docs for try!
显示它是如何实现的。这是一种简单的说法"如果发生错误,请将该错误返回给我的来电者#34;。在某些时候,您必须决定如何处理错误,但try!
表示稍后会处理错误。