Perl Inotify 不响应追加(即 echo 'test' >> 文件)

Posted

技术标签:

【中文标题】Perl Inotify 不响应追加(即 echo \'test\' >> 文件)【英文标题】:Perl Inotify not responding to append (ie, echo 'test' >> file)Perl Inotify 不响应追加(即 echo 'test' >> 文件) 【发布时间】:2012-05-04 16:05:26 【问题描述】:

当运行下面的测试代码来观察文件时,只有当我对文件执行“vim”并将其写出(或写退出)时,才会检测到事件。未检测到对文件执行“回显”或通过 perl 添加文本。

test_inotify.pl:

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;
use Carp;
use IO::File;
use Linux::Inotify2;

$|++;

my $readfile            = shift;
#my $action     = "IN_CLOSE_WAIT";
#my $action     = "IN_MODIFY";
#my $action     = "IN_OPEN";
my $action      = "IN_ALL_EVENTS";

unless ($readfile)  $readfile = "test.txt" ;

my $inotify     = Linux::Inotify2->new();

$inotify->watch($readfile, $action)
                or die "Inotify watch on " . $readfile . "failed: $!\n";

while () 

    my @events  = $inotify->read();

    unless (@events > 0) 
        print "Inotify Read Error: $!\n";
        exit;
    ;

    foreach my $event (@events) 
        print "Detected Event: " . $event->fullname . "\n";
    ;

;

test_fh_write.pl:

#!/usr/bin/perl -w

use strict;
use warnings;
use diagnostics;
use Carp;
use IO::File;

$|++;

my $readfile            = shift;

unless ($readfile)  $readfile = "test.txt" ;

my $readfh              = IO::File->new( $readfile, ">>" ) or
#my $readfh              = IO::File->new( $readfile, ">" ) or
                                die "Cannot open $readfile: $!";

$readfh->autoflush(1);

if ($readfh) 

    print $readfh "test\n\n";

;

undef($readfh);

我尝试过使用 test_fh_write.pl 以及类似这样的 echo 命令:'echo a >> test.txt'、'echo "test" >> test.txt' 等。

我也尝试过使用“$|”字符和没有(即使使用 $fh->autoflush(1)),但无济于事。我尝试过在 test_inotify.pl 中定义的每个 $action 变量,但它们的结果都是一样的。

【问题讨论】:

【参考方案1】:

我认为Linux::Inotify2::watch 的第二个参数是数字/位掩码,而不是字符串。你应该打电话来

$inotify->watch($readfile, IN_ALL_EVENTS)

而不是

$inotify->watch($readfile, "IN_ALL_EVENTS")

裸字IN_ALL_EVENTS 被解析为(可能是常量)函数&Linux::Inotify2::IN_ALL_EVENTS

【讨论】:

以上是关于Perl Inotify 不响应追加(即 echo 'test' >> 文件)的主要内容,如果未能解决你的问题,请参考以下文章

在 perl 中使用 inotify 监视多个文件

Perl inotify2 每次文件修改触发两次

使用 Perl 和 Linux::Inotify2 模块监控 Mac 地址的日志文件

为啥inotify会丢失事件?

echo和tee的使用

PHP缓存加速器