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