在完成写入之前如何确保不读取文件

当我们知道在Linux上使用inotify监视一个目录时,一旦文件被创build(在另一个进程写完之前)我们会得到通知。

有没有一种有效的方法来确保在写入文件之前不读取文件是由其他进程完成的?

我们可能会添加延迟阅读; 但是众所周知,这是有缺陷的。

要更清楚一点的情况; 这两个进程作为不同的用户运行; 预计的负载大约是每秒创build的几百个文件。

Solutions Collecting From Web of "在完成写入之前如何确保不读取文件"

根据你的问题,这听起来像你正在用IN_CREATE (也许是IN_OPEN )标志监视目录。 为什么不使用IN_CLOSE标志,以便在文件关闭时收到通知? 从那里,应该很容易跟踪是否有文件打开,你会知道你不想尝试阅读它。

创建它在别的地方,写信给它,关闭它,然后重命名 – 或者我错过了明显的东西?

您可以检查/proc/<pid>/fd以查看文件是否仍然打开。 如果没有在那里列出,您可以确定该过程不再使用它。

也许lsof命令可以帮助。 它列出了所有打开的文件。 $ man lsof