2015-03-25 38 views
0

我有一個子進程動態地將文件中的某些信息寫入文件。有時候我需要獲得N這個文件的最後一行數。但是當父進程正在讀文件時,子進程將繼續寫入。
我讀過,沒有意義鎖定它並解鎖,但我不確定。我不會從父進程寫任何東西,所以我只需要打開它來閱讀。
我發現模塊File::Tail,但不知道如何使用它得到N最後一行的數量,請提供一些簡單的例子。在Perl中已經打開了尾文件

另外我需要的建議是否有必要在這種情況下使用鎖定?

+0

你爲什麼決定不加鎖? 'flock'允許共享(讀取)鎖定和獨佔(寫入)鎖定。如果你不想在一個過程寫作的時候閱讀,那聽起來正是這份工作的工具。 – Sobrique 2015-03-25 11:39:27

+0

請給出一個使用任何模塊讀取最後N行文件的示例,我不想爲此調用shell函數尾部,它太昂貴和沉重 – ddynsdqw 2015-03-25 12:16:56

+0

@Sobrique:你有沒有試過用'flock'做任何嚴肅的事情?在Linux中有兩種文件鎖定機制,都可以從Perl訪問,而'flock'就是其中之一。但它們不兼容,僅適用於使用相同鎖定機制的程序。一定不行。 – 2015-03-25 14:12:53

回答

0

要讀取文件的最後一行N行,可以使用CPAN模塊File::ReadBackwards

use File::ReadBackwards; 

my $lastlines = File::ReadBackwards->new("file.txt"); 
print reverse map { $lastlines->readline() } (1 .. 2); 

這將打印文件的最後2行。用任何你想要的數字替換2。