如何在不lockingperl的情况下locking日志文件

如何在不lockingperl的情况下locking日志文件,第1张

概述如何在不lockingperl的情况下locking日志文件

这是我现在正在做的,但它locking文件。

#!/usr/bin/perl use Env qw( $USERname ); use file::Tail; use strict; use warnings; my $file = $ARGV[0]; print "$filen"; my $fileTail = file::Tail->new( name=>$file,maxinterval=>5,tail=>-1); my $line; while ( defined( $line = $fileTail->read ) ) { print $line; } exit;

根据文件 ,它不应该被锁定。 你的 *** 作系统是什么? 我不知道你是否使用windows,虽然shebang线建议不。 因此,有关您的环境的更多细节将有所帮助。

windows(或NTFS …或Perl如何在windows上实现打开…不完全确定)具有强制锁定转换为open()。 如果你打开一个文件阅读,其他人将无法打开写作。 如果您打开一个文件进行写入,其他人将无法打开它进行读取或写入。

您正在将文件打开以供阅读,所以没有人可以写入日志。 我想这就是发生了什么事情。 file :: Tail可能没有考虑到这一点。 它在工作,因为file :: Tail似乎关闭并重新打开文件句柄,如果它没有看到任何活动,它假定它已被截断或重新创建。 这释放你的锁,让其他文件滑入写入。

你可以通过打开一个用Perl进程读取的文件来测试这个,然后试着打开它来由另一个Perl进行追加。

我相信一个办法来解决这个问题是打开日志文件使用windows特定的功能,让您控制锁定行为。 Win32 :: SharedfileOpen似乎是事情。

fsopen(my $fh,$file,'r',SH_DENYNO) or dIE "Can't read '$file' with no locks: $!n";

这将打开一个文件阅读没有锁。 不幸的是,你有责任做其余的工作。 perlfaq可能会有所帮助。

总结

以上是内存溢出为你收集整理的如何在不lockingperl的情况下locking日志文件全部内容,希望文章能够帮你解决如何在不lockingperl的情况下locking日志文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1259549.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存