アプリケーションによって書き込まれているログ ファイルを監視したいと考えています。ファイルが書き込まれている間、またはその直後に、ファイルを 1 行ずつ処理したいと考えています。eof に達した後にファイルが拡張されたことを検出する方法が見つかりませんでした。
コードは Mac と PC で動作する必要があり、どの言語でもかまいませんが、私は C++ と Perl に最も精通しています。
それを行うための最良の方法についての提案はありますか?
Perl では、File::Tailモジュールが必要なことを正確に実行します。
の本質tail -f
は次のループです。
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
シーク呼び出しは、EOF フラグをクリアすることです。
一般的な十分な答え:
ほとんどの言語は、EOF で、データが読み取られなかったことを返します。一定の間隔を置いてから読み取りを再試行できます。それ以降、ファイルが大きくなった場合は、オペレーティング システムからデータが返されます。
tail -f から標準 io を読み取ることができるはずです
私はティーを介してアクションを出力することを考えていたでしょう。