在内存映射时写入内存映射文件

时间:2018-02-27 19:24:34

标签: c++ c winapi memory-mapped-files memory-mapping

我有内存映射磁盘上的文件如下:

 const wchar_t fileName[] = L"temp.txt";
 HANDLE h = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
 HANDLE fileMap = CreateFileMapping(h, NULL, PAGE_READWRITE, 0x0, 1024, NULL);
 char *ptr = (char *)MapViewOfFile(fileMap, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 1024)

是否有可能在内存映射时由另一个进程写入同一文件?

FILE *fp = fopen("temp.txt", "w+"); if(NULL == fp) printf("Failed to open\n");

以上代码始终打印'无法打开'如果文件是内存映射的。

1 个答案:

答案 0 :(得分:0)

连贯共享使用的答案很简单:是的,除了远程文件。 (请参阅CreateFileMapping和/或MapViewOfFile)的文档。

对于共享使用,您必须以共享模式打开文件(CreateFile)(您没有指定)。 我不知道共享模式fopen的运行方式,但我怀疑您fopenCreateFile共享模式丢失而失败。如果在使用共享模式时fopen仍然失败,则应使用CreateFile代替