[Moscow.pm] is_modified($file)

Andrew Shitov andy на shitov.ru
Вт Янв 6 21:17:01 PST 2009


Мне потребовалась функция, сообщающая, был ли изменен файл, причем
делающая это максимально быстро и нересурсоемко.

Самый простой способ (проверка времени изменения) работает в
большинстве случаев, но не всегда. Пример:

  `cp file1.txt temp.txt`;
  do_something('temp.txt');

  `rm temp.txt ; cp file2.txt temp.txt`;
  do_something('temp.txt');

Если do_something() работает намного меньше секунды, то с большой
вероятностью дата изменения (создания) файла temp.txt окажется одной и
той же при каждом вызове, и проверка mtime не поможет.

Сейчас я дополнительно проверяю и размер файла:

    return
        $cache{$path}[1] != (stat $path)[9] || # mtime
        $cache{$path}[2] != (stat _)[7];         # size

Но если файлы случайно окажутся одинакового размера, и это не поможет.


Можно ли как-то еще отследить, что между двумя моими чтениями в файл
кто-то что-либо записывал? Варианты с md5 или diff не подходят, потому
что полностью читать файл с диска ну совсем не хочется.

-- 
Andrew Shitov
______________________________________________________________________
andy на shitov.ru | http://shitov.ru


Подробная информация о списке рассылки Moscow-pm