我想在 Racket 中实现类似“tail -f”的行为。也就是说,我想从文件中读取,当我读完时,能够制作类似 "blocking" 的东西(read-line file)
,当其他一些进程将一行附加到file时,它会返回。我尝试与同步,(read-line-evt file)
但是,如果我在文件的末尾,而不是阻塞直到其他数据可用,它会立即返回。有没有办法做到这一点?
问问题
146 次
1 回答
2
我认为您没有任何方法可以避免轮询文件。
请注意,Racket 的所有输入函数都考虑eof
了一个在到达输入流末尾时应该返回的值——所以当到达输入流的末尾时,所有事件都会立即返回该值。至少我没有看到任何看起来像“等到一些输入准备好,而不是eof
”的东西。
无论如何,如果您知道一些触发回调而不是轮询文件的系统调用,那么您也有 ffi。AFAICT,用于使用 inotify 的 linux 源代码tail
,因此您可以使用一个旧包,该包与来自球拍的称为mzfam的接口。(但它已经很老了,可能需要一些更新工作。)
于 2011-11-09T09:14:27.647 回答