假设一个长时间运行的进程写入日志文件。假设日志文件无限期地保持打开状态。假设一个粗心的系统管理员删除了该日志文件。程序可以检测到这种情况发生了吗?
假设fstat()
将报告已删除文件的链接计数为零是否安全?
在我看来,截断有点棘手。部分取决于文件描述符是否在O_APPEND
模式下运行。如果日志文件没有运行O_APPEND
,那么程序的日志描述符的当前写入位置不会改变,并且截断会删除前导字节,但程序会继续在“末尾”写入,留下一个幻象零的间隙字节(它们读为零,但不一定占用磁盘空间)。
如果程序以 运行O_APPEND
,那么它将写入当前存在的文件末尾。观察截断的唯一方法是注意文件位置不是程序预期的位置 - 这反过来意味着明确跟踪该位置。
总的来说,我并不像删除那样担心截断,但任何想法都会受到欢迎。