2012-05-04 15 views
2

solution provided in perldocによると、私はtail -fをエミュレートしようとしていますが、期待通りに動作しません。以下のコードはすべての行を最初に印刷することができますが、新しく追加された行は印刷できません。私がここで何かを逃しているなら、あなたは精巧に言ってください。Perlでtail -fをシミュレートする

#!/usr/bin/perl 
open (LOGFILE, "aa") or die "could not open file reason $! \n"; 

for (;;) 
{ 
     seek(LOGFILE,0,1); ### clear OF condition   
     for ($curpos = tell(LOGFILE); <LOGFILE>; $curpos = tell(LOGFILE)) 
     { 
       print "$_ \n"; 
     } 

     sleep 1; 
     seek(LOGFILE,$curpos,0); ### Setting cursor at the EOF 
} 
+0

「aa」とはどういう意味ですか? – sarnold

+0

aaは継続的に成長しているファイル名であり、tail -f aaを実行する必要があります。 – user419534

+3

も参照してください[File :: Tail](http://search.cpan.org/perldoc?File::Tail) – ikegami

答えて

1

が問題なく機能します。 "aa"をどのように更新していますか? bufferedへの書き込みが"aa"の場合、すぐにデータが表示されません。 別の端末で次の操作を試して、更新プログラムが表示されているかどうかを確認できますか?

while (1) 
echo "test" >> aa 
end 

あなたがaaを更新するためにPerlを使用している場合は、thisバッファリング上の部分とどのように無効にするをチェックしてください。

+0

viエディタを使って行を追加すると動作しません。 echo "test" >> aaは動作します。 – user419534

+2

あなたはおそらく[バッファリングに苦しんでいる](http://perl.plover.com/FAQs/Buffering.html)です。 – mob

+0

viを使用すると 'tail -f aa'はどうなりますか?あなたが '' aa "'を更新するために 'vi'を使うとき、' tail -f "aa" 'とあなたのスクリプトと異なる動作をしていますか? – dpp

関連する問題