提问者:小点点

在C++中如何检查一个文件是否被另一个进程使用?


我需要检查一个文件当前是否被另一个进程打开,例如一个文本编辑器(但需要应用到其他所有东西太)。

我尝试使用std::OfStream::is_open()等,但这不起作用。 当我的程序正在检查文件是否打开时,我可以在文本编辑器中打开该文件。 程序将其视为一个封闭的文件,然后继续进行。 只有当我将它作为另一个ofstream打开时,这才会起作用。

我正在使用文件系统库来复制文件,并且只有在客户机服务器上的另一个进程当前没有写入文件的情况下,它们才可能被复制(然后被删除)。

对这个很好奇。 我一直在想这个问题,但我自己一直没有找到一个好办法。

我目前正在做一个程序,需要能够在linux和Windows上运行。 每隔5秒,它将目录a,b,c,d中的所有文件复制到X。 这可以由客户端在规则中设置。 在它复制了一切之后。 所有文件都可能被删除。 一天之后(或者无论客户机告诉程序什么),来自x的所有文件都需要压缩并归档到位置Y。 因此,问题是,只有在将所有文件放置在目录a,b,c,d中的其他程序现在没有触及该特定文件时,文件才可能被删除(和复制)。 希望能让问题更清晰。

在任何人开始之前。 是的。我知道数据竞争的情况。 我现在不关心这个。 该程序对文件内容完全不执行任何操作。 并且在一个文件被另一个进程关闭后,它将永远关闭。


共1个答案

匿名用户

我需要检查一个文件当前是否被另一个进程打开

所以先读一本关于操作系统的好教材。

特别是在Linux上,您可能使用inotify(7)工具,或者/proc/伪文件系统(请参阅proc(5)),或者可能使用lsof(8)。 它们只适用于本地文件系统(而不是远程文件系统,如NFS)。 另请参阅Advanced Linux Programming and syscalls(2)。

而且您可能会有一些意外(例如,一个进程被安排得如此之快,以致于删除了一个文件,以至于您没有时间做任何事情)

因为Windows需要更多的时间来阅读它的文档。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|检查|文件|进程)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?