在内存映射时写入内存映射的文件
writing to memory mapped file while it is memory-mapped
我的内存映射在磁盘上的文件如下:
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
可以运行,但是我怀疑您的fopen
因CreateFile
缺少共享模式而失败。如果使用共享模式时fopen
仍然失败,则应使用CreateFile
,
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 字符串共享内存映射的向量
- 确保内存映射页位于内存中
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- 内存映射文件访问非常慢
- 内存映射C++中的流数据
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 内存映射区域初始数据
- 内存映射 IO 概念详细信息
- 为什么 du -sh 输出错误大小的内存映射文件
- 您可以将C 对象映射到内存映射的外围设备吗?
- 将 Android 内存映射到具有零拷贝的 GraphicBuffer
- 在内存映射时写入内存映射的文件
- 如何使用 Boost 内存映射解析 C++ 中的 CSV?
- Growing Boost.使用单个写入器的进程间内存映射文件
- 调整窗口内存映射文件的大小,而不会使指针失效
- Winapi:是否需要在可执行内存映射的文件上调用FlushInstructionCache
- 与从C++到C#的内存映射文件共享链式结构
- 在 C++ 和 C# 之间共享内存映射文件结构