【发布时间】:2015-05-29 01:21:20
【问题描述】:
我有一个子进程可以动态地将一些信息写入文件。有时我需要得到N 这个文件的最后几行。但是当父进程正在读取文件时,子进程会继续写入。
我已经读过锁定和解锁没有意义,但我不确定。我不会从父进程中写任何东西,所以我只需要打开它来阅读。
我找到了模块 File::Tail ,但不明白如何使用它来获取 N 最后行数,请提供一些简单的示例。
我还需要建议在这种情况下是否有必要使用锁定?
【问题讨论】:
-
你为什么决定不加锁?
flock允许共享(读)锁和排他(写)锁。如果您不想在一个进程正在写入时阅读,那听起来正是这项工作的工具。 -
请举个例子,使用任何模块读取文件的最后N行,我不想为此调用shell函数tail,它太贵太重了
-
@Sobrique:你试过用
flock做任何严肃的事情吗? Linux 中有两种文件锁定机制,都可以从 Perl 访问,flock就是其中之一。但是它们是不兼容的,并且仅适用于使用相同锁定机制的程序。见鬼。 -
取决于你所说的“严肃”是什么意思——我已经编写了执行 OP 尝试的脚本,并且运行良好。不过,不建议将其用于 NFS 挂载或类似情况。
标签: perl file io multiprocessing tail