gpt4 book ai didi

C++如何检查文件是否正在使用——多线程多进程系统

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:08 25 4
gpt4 key购买 nike

C++:有没有办法检查文件是否已被另一个进程/类/设备打开以供写入?

我正在尝试从一个文件夹中读取文件,该文件夹可能会被其他进程访问以进行写入。如果我读取一个同时被写入的文件,读取和写入过程都会给我错误(写入不完整,我可能只得到一个标题)。因此,在决定是否打开该特定文件之前,我必须检查某种类型的条件。我一直在使用 boost::filesystem 来获取我的文件列表。我想要同时兼容 Unix 和 Windows。

最佳答案

您必须使用文件咨询锁。在 Unix 中,这是 flock,在 Windows 中是 LockFile

但是,您的阅读 过程出错的事实可能表明您在该过程中没有以只读模式打开文件。您必须为只读访问指定正确的标志,或者从操作系统的角度来看您有两个编写器。

两种操作系统都支持读写锁,允许无限的读者,但只有在没有作者的情况下,并且一次最多只有一个作者可以访问。

既然你说你的系统是多进程(即,不是多线程),你不能使用条件变量(除非它在进程间共享内存中) .您也不能使用单个编写器作为协调器,除非您愿意通过套接字或共享内存将数据传输到那里。

关于C++如何检查文件是否正在使用——多线程多进程系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com