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

Tro*_*yen 8 c c++ windows winapi file

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

FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...
Run Code Online (Sandbox Code Playgroud)

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

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

由于我的开发环境是Windows 7,因此这个问题表明它可能是启用读取共享的问题.但是,该线程中的所有答案都依赖于CreateFile,而我正在处理使用stdio.h编写的遗留代码.

有没有办法可以使用fopen类函数从文件中同时读取多个程序?

pb2*_*b2q 6

如果您可以更改fopen例程,则尝试fopen使用_fsopenfor 替换调用,以进行共享读/写._fsopen是特定于mscrt的.

如果您可以使用CreateFile,并且不想重写所有遗留代码以进行读/写,您还可以尝试将a FILE *与winapi文件句柄相关联.使用_open_osfhandle得到由返回的文件句柄的文件描述符CreateFile,然后使用_fdopen获得FILE *从该文件描述符.