2012-07-19 39 views
8

我有一个应用程序读取一组数据文件并执行一些模型计算。该计划并不需要修改数据文件本身,所以我目前正在与只读标志打开它们,如下图所示:我可以允许多个程序同时读取同一个文件吗?

​​

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

我认为,因为我打开具有只读权限的文件,两个程序可能同时读取同一个文件。相反,我遇到了各种各样的错误,“文件无法打开,因为它正在被另一个进程使用”。

由于我的开发环境是Windows 7,this question suggests it might be a matter of enabling read sharing。然而,该线程中的所有答案依赖于CreateFile,而我正在处理用stdio.h编写的遗留代码。

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

+0

我认为除了使用CreateFile()之外别无他法。问题是如何从句柄中获得FILE *。 – Paranaix 2012-07-19 18:23:47

+1

你也可以使用std :: ifstream ..毕竟这是标记为C++? – stijn 2012-07-19 18:25:56

+0

@Paranaix:'_open_osfhandle',然后是'_fdopen'。 – MSalters 2012-07-19 18:39:45

回答

6

如果您可以更改fopen例程,则尝试将fopen调用替换为_fsopen,以便共享读取/写入。 _fsopen是mscrt特定的。

如果可以使用CreateFile,又不想/重新编写所有的遗留代码进行读写,你也可以尝试一个FILE *有WINAPI文件句柄相关联。使用_open_osfhandleCreateFile返回的文件句柄中获取文件描述符,然后使用_fdopen从该文件描述符中获取FILE *

相关问题