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 が変更されるたびに 2 回呼び出されます ($counter を 2 回インクリメントします)。

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 に答える