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

writing to memory mapped file while it is memory-mapped

本文关键字:内存 映射 文件      更新时间:2023-10-16

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

 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 openn");

上面的代码总是打印"未打开",如果文件是内存映射的。

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

为了共享使用,您必须在共享模式(未指定(中打开文件(CreateFile(。我不知道哪种共享模式fopen可以运行,但是我怀疑您的fopenCreateFile缺少共享模式而失败。如果使用共享模式时fopen仍然失败,则应使用CreateFile