[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