Я запускаю небольшой скрипт inotify, который настраивает просмотр файла. Каждый раз, когда этот файл редактируется и сохраняется, сценарий замечает, что запускается событие DELETE_SELF. Это нормально и если да то почему? Разве подсистема inotify не должна заметить, что файл все еще существует?
inotify delete_self при изменении и сохранении файла
Ответы (1)
Это зависит от того, что делает с ним приложение, редактирующее файл. В этом случае похоже, что поведение вашего редактора при сохранении файла заключается в удалении старого файла и записи нового содержимого в виде нового файла с тем же именем. С точки зрения inotify именно это и происходит, поэтому он запускает событие удаления, а затем событие создания. Inotify не может знать, что файл, который был удален, и файл, созданный на его месте, логически связаны.
person
Tyler McHenry
schedule
02.05.2010
Я пробовал с vim, gedit и kate — у всех одинаковое поведение. Ваше объяснение определенно имеет смысл, но мне интересно, почему это реализовано именно так?
- person hyperboreean; 03.05.2010
Обычно это работает следующим образом: у вас есть файл с именем
moo.txt
, который вы редактируете. Когда вы сохраняете, ваш редактор записывает файл в moo.txt.blah
, затем отменяет связь с moo.txt
и переименовывает moo.txt.blah
в moo.txt
.
- person Kitsune; 03.05.2010
На самом деле, обычно он не выполняет часть
unlink()
— rename('moo.txt.blah', 'moo.txt')
атомарно разъединит и заменит moo.txt
. Вот почему редакторы делают это таким образом — поскольку операция атомарна, и если ваш редактор или система выйдет из строя, вы гарантированно увидите либо старый файл, либо новый, а не наполовину написанный файл. гибридный.
- person caf; 03.05.2010
Используйте
ed
(стандартный редактор), если вы не хотите, чтобы исходный файл удалялся. :)
- person Anthony Geoghegan; 11.02.2020