由于IO.select需要IO对象来查看是否要读取任何内容,因此它通常用于套接字和管道,我发现used to read keypresses。但是,我还没有找到一种方法使它与文件句柄一起使用。如果可以,它可以模仿在shell中运行tail -f
。
def handle_file str
puts str
end
file_handle = File.new "test/file"
loop {
rd, _, _ = IO.select([file_handle])
case rd[0]
when file_handle
handle_file(rd[0].read) # or read_nonblock ?
end
}
这最终不会输出任何内容并将CPU运行到地面。如果我使用read_nonblock(1024)
,则回复为EOFError: end of file reached
。
这可能吗?我应该像文档中的示例一样拯救IO::WaitReadable
(我真的不明白,这就是我要问的原因)。
非常感谢任何帮助或见解。