9

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

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

我想让我的程序的多个实例同时运行,使用相同的数据集,但对数据执行不同的计算。我的程序都不需要修改数据文件。由于数据文件非常大,我无法制作单独的数据副本以供每个程序使用。

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

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

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

4

1 回答 1

6

如果您可以更改fopen例程,请尝试将fopen调用替换为_fsopen, 以进行共享读/写。_fsopen是特定于 mscrt 的。

如果您可以使用CreateFile,并且不想重写所有旧代码以进行读/写,您还可以尝试将 aFILE *与 winapi 文件句柄相关联。用于_open_osfhandle从返回的文件句柄中获取文件描述符CreateFile,然后用于从该文件描述符_fdopen中获取一个。FILE *

于 2012-07-19T18:23:55.477 回答