ファイルに追記された内容を読み込む
ログファイルは末尾に新しい内容が追記されていくのが一般的である。そのようなファイルに対しては、File#read
がEOF
を返しても、繰り返し読み込み続けることで、ファイルに追記された内容を読み込むことができる。
以下はコマンドライン引数で渡されたファイルを監視して、ファイルに追記された内容を出力する簡易tail -f
コマンドを実装した例である。無限ループを使うので、終了にはCtrl + C
をする必要がある。
open(ARGV[0]){|f| f.seek(0, IO::SEEK_END) # 末尾にシーク loop{ # 無限ループでファイルへの追記を監視 print f.read sleep 1 } }