Racket に「tail -f」のような動作を実装したいと考えています。つまり、ファイルから読み取りたいのですが、最後に(read-line file)
到達したときに、他のプロセスがfileに行を追加したときに返される「ブロッキング」のようなものを作成できます。と同期しようとしましたが、ファイル(read-line-evt file)
の最後にいる場合は、他のデータが利用可能になるまでブロックするのではなく、すぐに戻ります。それを行う方法はありますか?
1 に答える
2
ファイルのポーリングを回避する方法はないと思います。
Racket のすべての入力関数eof
は、入力ストリームの最後に到達したときに返される値を考慮することに注意してください。したがって、すべてのイベントは、最後に到達するとすぐに値を返します。少なくとも、「何らかの入力の準備が整うまで待つ」ように見えるものは見当たりませんeof
。
いずれにせよ、ファイルをポーリングする代わりにコールバックをトリガーするシステムコールについて知っている場合は、 ffi もあります。Linux のソースコードである AFAICTは inotify を使用しているため、 mzfamtail
と呼ばれるラケットからのインターフェースとなる古いパッケージを使用できる場合があります。(ただし、かなり古いため、更新作業が必要になる場合があります。)
于 2011-11-09T09:14:27.647 に答える