【发布时间】:2018-02-27 19:24:34
【问题描述】:
我已将磁盘上的文件映射如下:
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");
如果文件是内存映射的,上面的代码总是打印“无法打开”。
【问题讨论】:
-
我不喜欢你混合不同 API 的方式......无论如何,看看
CreateFile的第三个参数的文档...... -
你的意思是 fopen 和 createfilemapping 吗?我正在尝试模拟用例
-
文件通常不会以独占模式打开(用于写入),从而阻止其他应用程序写入它们吗?
-
当然可以
-
在 fopen 中使用 "w+" 将尝试重新创建文件!试试“r+”。
标签: c++ c winapi memory-mapped-files memory-mapping