我有一个应用程序,它读取一组数据文件并执行一些模型计算。程序不需要自己修改数据文件,所以我现在用只读标志打开它们,如下所示:
FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...
我想让我的程序的几个实例同时运行,使用相同的数据集,但对数据执行不同的计算。我的程序都不需要修改数据文件。由于数据文件非常大,我无法为每个程序制作单独的数据副本。
我认为因为我打开具有只读权限的文件,所以两个程序可能同时从同一个文件中读取。相反,我得到了各种错误,“文件无法打开,因为它正被另一个进程使用”。
由于我的开发环境是Windows 7,this question suggests it might be a matter of enabling read sharing。但是,该线程中的所有答案都依赖于CreateFile,而我正在处理用stdio.h编写的遗留代码。
有没有办法可以使用fopen类函数从文件中同时读取多个程序?
答案 0 :(得分:6)
如果您可以更改fopen
例程,请尝试使用_fsopen
替换fopen
次来电,以进行共享读/写。 _fsopen
是特定于mscrt的。
如果可以使用CreateFile
,并且不想重写所有遗留代码以进行读/写,您还可以尝试将FILE *
与一个winapi文件句柄。使用_open_osfhandle
从CreateFile
返回的文件句柄中获取文件描述符,然后使用_fdopen
从该文件描述符中获取FILE *
。