4

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

为什么?

4

2 回答 2

4

要么>>按照@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
于 2013-10-01T12:47:41.927 回答
4

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

于 2013-10-01T12:33:16.673 回答