Предположим, что долго выполняющийся процесс записывает данные в файл журнала. Предположим, что файл журнала остается открытым на неопределенный срок. Предположим, что небрежный системный администратор удалит этот файл журнала. Может ли программа определить, что это произошло?
Можно ли предположить, что fstat()
сообщит об нулевом счетчике ссылок для удаленного файла?
С усечением, как мне кажется, немного сложнее. Отчасти это зависит от того, работает ли файловый дескриптор в режиме O_APPEND
. Если файл журнала не выполняется с O_APPEND
, то текущая позиция записи дескриптора журнала программы не изменяется, а усечение удаляет начальные байты, но программа продолжает запись в «конец», оставляя призрачный пробел. нулевые байты (они читаются как нули, но не обязательно занимают место на диске).
Если программа запускается с O_APPEND
, то она запишет в конец файла такой, какой он есть на данный момент. Единственный способ наблюдать усечение - заметить, что позиция файла не там, где ожидала программа, что, в свою очередь, означает явное отслеживание этой позиции.
В целом, я не так беспокоюсь об усечении, как об удалении, но любые мысли приветствуются.