2012-05-04 106 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 

如果你正在使用Perl來更新aa,檢查this節上緩衝和如何禁用。

+0

如果我使用vi編輯器添加行,它不起作用。而回聲「測試」>> aa確實有效。 – user419534

+2

那麼你可能[患有緩衝](http://perl.plover.com/FAQs/Buffering.html)。 – mob

+0

當你使用vi時,'tail -f aa'怎麼樣?當你使用'vi'來更新''aa''時,你是否看到'tail -f「aa」'和你的腳本的不同行爲? – dpp