每次文件修改时,Perl inotify2会触发两次

时间:2013-10-01 12:18:45

标签: linux perl inotify

我正在编写一个监视文件以进行更改的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

为什么?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

使用>>作为@Lajos Veres建议,或者关注CLOSE_WRITE事件(Linux::Inotify2模块IN_CLOSE_WRITE),

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