假设一个长时间运行的进程写入日志文件。假设日志文件无限期地保持打开状态。假设粗心的系统管理员删除了该日志文件。程序能检测到这种情况发生了吗?
可以安全地假设fstat()
会报告已删除文件的链接计数为零吗?
在我看来,截断有点棘手。在某种程度上,这取决于文件描述符是否正在运行O_APPEND
模式。如果日志文件未运行O_APPEND
,那么程序日志描述符的当前写入位置不会改变,截断会删除前导字节,但程序会继续在“末尾”写入,留下幻象零字节的间隙(它们读作零,但不一定占用磁盘空间)。
如果程序运行O_APPEND
,然后它将写入当前存在的文件末尾。观察截断的唯一方法是注意文件位置不是程序预期的位置 - 这反过来意味着显式跟踪该位置。
总的来说,我并不像担心删除那样担心截断,但任何想法都会受到欢迎。
检查fstat()
如果文件被硬链接或重命名,则返回零链接计数将失败。我可能会定期比较stat()
的 inode 编号fstat()
's.
我不确定截断。
tail -F
检查删除和截断,因此我会检查其源代码以了解它是如何实现的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)