Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跟踪已在Perl中打开的文件_Perl_File_Io_Multiprocessing_Tail - Fatal编程技术网

跟踪已在Perl中打开的文件

跟踪已在Perl中打开的文件,perl,file,io,multiprocessing,tail,Perl,File,Io,Multiprocessing,Tail,我有一个子进程,它将一些信息动态写入文件。有时我需要获取此文件的最后行数。但当父进程正在读取文件时,子进程将继续写入该文件。 我已经读到,没有意义锁定和解锁,但我不确定。我不会从父进程写入任何内容,因此我只需打开它进行读取。 我找到了模块File::Tail,但不知道如何使用它来获取N最后的行数,请提供一些简单的示例 我还需要建议在这种情况下是否需要使用锁定?要读取文件的最后一行,可以使用CPAN模块File::ReadBackwards use File::ReadBackwards; my

我有一个子进程,它将一些信息动态写入文件。有时我需要获取此文件的最后行数。但当父进程正在读取文件时,子进程将继续写入该文件。
我已经读到,没有意义锁定和解锁,但我不确定。我不会从父进程写入任何内容,因此我只需打开它进行读取。
我找到了模块
File::Tail
,但不知道如何使用它来获取
N
最后的行数,请提供一些简单的示例


我还需要建议在这种情况下是否需要使用锁定?

要读取文件的最后一行,可以使用CPAN模块
File::ReadBackwards

use File::ReadBackwards;

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

这将打印文件的最后2行。用您想要的任何数字替换2。

为什么您决定不锁定<代码>群集允许共享(读)锁和独占(写)锁。如果您不想在一个进程写入时读取,那么这听起来正是该任务的工具。请给出一个使用任何模块读取最后N行文件的示例,我不想为此调用shell函数tail,它太昂贵而且heavy@Sobrique:您是否尝试过对flock进行任何严肃处理?Linux中有两种文件锁定机制,都可以从Perl访问,
flock
就是其中之一。但是它们是不兼容的,并且只适用于使用相同锁定机制的程序。不,这取决于你所说的“严肃”是什么意思——我已经写了一些脚本,可以完成OP想要做的事情,而且效果很好。不过,不建议将其用于超过NFS的装载或类似的装载。