检查另一个程序是否打开了文件

标签 c linux file-access

在进行了大量研究但也未能找到解决我问题的方法后,我决定在 stackoverflow 上发帖。

嗯,我的问题有点不寻常,所以我想这就是我找不到任何答案的原因:

我有一个程序正在将内容记录到文件中。然后我有另一个负责传输该文件。最后我有第三个获取文件并处理它。

我的问题是: 文件传输程序需要在文件仍在录制时发送文件。问题在于,当文件传输程序到达文件末尾时并不意味着文件实际上是完整的,因为它仍在记录中。

最好能有一些东西来检查记录器是否仍然打开该文件,或者它是否已经关闭,以便能够判断文件末尾是否真的是文件末尾,或者根本就没有还有待阅读的更多数据。

希望你能帮我解决这个问题。也许您对如何解决这个问题有另一种想法。

提前谢谢你。

格科德

最佳答案

简单地说——你不能不使用文件系统通知机制,windows、linux 和 osx 都有这样的风格。我忘记了 Windows 是如何做到这一点的,但 linux 有“inotify”而 osx 有“knotify”。

处理这个问题的简单方法是,记录到一个 tmp 文件,当记录完成后,将文件移动到“ready-to-transfer-the-file”目录,如果这样做,文件就可以在同一个文件系统上,当您进行移动时,它将是原子的和即时的,确保您的传输实用程序在任何时候“看到”一个新文件时,它都将完全形成并准备就绪。

或者,让您的 tmp 文件没有扩展名,然后在完成后将文件重命名为传输代理正在轮询的扩展名。

关于检查另一个程序是否打开了文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740409/

相关文章:

linux - 如何重写这个多重 OR 条件,以便它使用 Perl "for"循环?

c - SQlite3 header 未链接

php - 禁止不需要的客户端请求使用 PHP 文件

c# - 如何检查文件是否正在使用?

c - 我无法在 ‘;’ token 之前解决我的代码预期表达式中的此错误

c - 使用系统单调时钟分析相对 C 代码执行时间

在 Visual Studio Code 中进行 C 编译

c - 在 C 中使用指针从字符串中删除元音

linux - 让 GMP 与 GCC 4.5.2 一起工作

linux - 如何使用 sudo 进行输出重定向?