我可以允许多个程序同时从同一个文件中读取吗
Can I allow multiple programs to read from the same file at the same time?
我有一个应用程序,它读取一组数据文件并执行一些模型计算。该程序不需要修改数据文件本身,所以我现在用只读标志打开它们,如下所示:
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_osfhandle
从CreateFile
返回的文件句柄中获取文件描述符,然后使用_fdopen
从该文件描述符中获取FILE *
。
相关文章:
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- 不同C++文件中未命名命名空间中的名称可以引用同一个命名事物吗?
- 当 PHP、C++ 和 shell 脚本尝试访问同一个文件时,如何避免错误?
- 为什么 boost 文件系统和 libpq-fe 标头不会在同一个文件中编译
- 如何在同一个文件中写入C++
- fopen 和 fwrite 从多个线程到同一个文件
- 将静态和动态库链接到同一个可执行文件会导致哪些问题
- C "undefined reference",但我在同一个文件中指定了它
- DLL使用sqlite3从不同的进程写入同一个数据库文件
- 你能在同一个Cinder文件中发送和接收OSC数据吗
- 我可以允许多个程序同时从同一个文件中读取吗
- 如何检查文件指针/描述符/句柄是否关联到同一个文件/管道/终端
- IO:从一个C++程序和另一个Java程序同时写入和读取同一个文本文件
- 如何同时将 ASCII 和 BINARY 数据写入同一个文件
- C++内联函数的定义必须在同一个文件中
- 我可以在同一个.CPP文件中声明和定义静态类变量吗
- C++使用不同的流读取和写入同一个文件
- 两个进程打开同一个文件进行写入
- C++未定义的引用,尽管函数是在同一个文件中定义的
- 一遍又一遍地创建同一个文本文件