1

我想在 Racket 中实现类似“tail -f”的行为。也就是说,我想从文件中读取,当我读完时,能够制作类似 "blocking" 的东西(read-line file),当其他一些进程将一行附加到file时,它​​会返回。我尝试与同步,(read-line-evt file)但是,如果我在文件的末尾,而不是阻塞直到其他数据可用,它会立即返回。有没有办法做到这一点?

4

1 回答 1

2

我认为您没有任何方法可以避免轮询文件。

请注意,Racket 的所有输入函数都考虑eof了一个在到达输入流末尾时应该返回的值——所以当到达输入流的末尾时,所有事件都会立即返回该值。至少我没有看到任何看起来像“等到一些输入准备好,而不是eof”的东西。

无论如何,如果您知道一些触发回调而不是轮询文件的系统调用,那么您也有 ffi。AFAICT,用于使用 inotify 的 linux 源代码tail,因此您可以使用一个旧包,该包与来自球拍的称为mzfam的接口。(但它已经很老了,可能需要一些更新工作。)

于 2011-11-09T09:14:27.647 回答