【问题标题】:Perl inotify2 triggers twice for each file modificationPerl inotify2 每次文件修改触发两次
【发布时间】:2013-10-01 12:18:45
【问题描述】:

我正在编写一个监视文件更改的 Perl 脚本。

#!/usr/bin/perl
use strict;
use Linux::Inotify2;

my $inotify = new Linux::Inotify2 or die $!;
my $filename = "/tmp/foo";
my $counter = 0;

$inotify->watch (
    $filename,
    IN_MODIFY,
    sub {
        ++$counter;
        print "changed: $counter\n";
    }
) or die $!;

1 while $inotify->poll;

如果我像这样测试它,则每次 /tmp/foo 更改时都会调用此处理程序两次(增加 $counter 两次):

echo abc > /tmp/foo

为什么?

【问题讨论】:

    标签: linux perl inotify


    【解决方案1】:

    按照@Lajos Veres 的建议使用>>,或者观看CLOSE_WRITE 事件(即IN_CLOSE_WRITE 用于Linux::Inotify2 模块),

    echo > /tmp/foo
    

    inotifywait -m /tmp/foo
    Setting up watches.
    Watches established.
    /tmp/foo MODIFY
    /tmp/foo OPEN
    /tmp/foo MODIFY
    /tmp/foo CLOSE_WRITE,CLOSE
    

    【讨论】:

    • Bareword "CLOSE_WRITE" not allowed while "strict subs" 尽管 IN_MODIFY 运行没有任何抱怨。什么给了?
    • 试试 IN_CLOSE_WRITE
    【解决方案2】:

    > 首先截断文件(我认为它本身也是修改)。试试>>。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2014-04-07
      • 2020-06-16
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多