我可以允许多个程序同时从同一个文件中读取吗

Can I allow multiple programs to read from the same file at the same time?

本文关键字:文件 同一个 读取 许多个 程序 我可以      更新时间:2023-10-16

我有一个应用程序,它读取一组数据文件并执行一些模型计算。该程序不需要修改数据文件本身,所以我现在用只读标志打开它们,如下所示:

FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...

我希望我的程序的几个实例同时运行,使用相同的数据集,但对数据执行不同的计算。我的任何程序都不需要修改数据文件。由于数据文件很大,我无法单独复制数据以用于每个程序。

我假设,因为我以只读权限打开文件,所以两个程序可能同时从同一个文件中读取。相反,我收到了各种错误,比如"文件无法打开,因为它正被另一个进程使用"。

由于我的开发环境是Windows7,这个问题表明这可能是一个启用读取共享的问题。然而,该线程中的所有答案都依赖于CreateFile,而我处理的是用stdio.h编写的遗留代码。

有没有一种方法可以让我使用fopen类函数同时从一个文件中读取几个程序?

如果可以更改fopen例程,则尝试用_fsopen替换fopen调用,以实现共享读/写。_fsopen是mscrt特异性的。

如果可以使用CreateFile,并且不想重写所有用于读/写的遗留代码,那么也可以尝试将FILE *与winapi文件句柄相关联。使用_open_osfhandleCreateFile返回的文件句柄中获取文件描述符,然后使用_fdopen从该文件描述符中获取FILE *