inotify delete_self при изменении и сохранении файла

Я запускаю небольшой скрипт inotify, который настраивает просмотр файла. Каждый раз, когда этот файл редактируется и сохраняется, сценарий замечает, что запускается событие DELETE_SELF. Это нормально и если да то почему? Разве подсистема inotify не должна заметить, что файл все еще существует?


person hyperboreean    schedule 02.05.2010    source источник


Ответы (1)


Это зависит от того, что делает с ним приложение, редактирующее файл. В этом случае похоже, что поведение вашего редактора при сохранении файла заключается в удалении старого файла и записи нового содержимого в виде нового файла с тем же именем. С точки зрения inotify именно это и происходит, поэтому он запускает событие удаления, а затем событие создания. Inotify не может знать, что файл, который был удален, и файл, созданный на его месте, логически связаны.

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