检测包含我的日志文件的目录的重命名

检测包含我的日志文件的目录的重命名

我们有一个 C++ 程序,它将其消息记录到一个文件中。每隔一段时间,包含此日志文件的目录就会被重命名(甚至删除),并重新创建一个同名的文件夹。

守护进程如何检测到这种情况的发生——以便它可以重新打开其日志?也就是说,我知道,我可以使用 inotify 来做到这一点(或者更一般地说,使用自由事件),但是也许还有更简单的东西吗?

我们的 Python 程序使用logging.handlers.WatchFileHandler()——C++ 有类似的东西吗?我不需要立即知道更改——只有当程序有新消息要写出时......

答案1

我想,唯一的可移植方法是fstat()已经打开的文件描述符(一次)和stat()原始文件名(在每次新写入之前)并比较结果。

如果stat()失败,或者两个调用填写的st_dev或字段不相同,请在写入新日志条目之前重新打开日志文件。st_ino

相关内容