我的文件(sample.txt)有 10 个字符。我以写入模式打开文件,并完成了 createfilemapping("mymapping")
。然后我通过 getchar 保存该进程。
然后打开另一个进程执行以下操作
openfilemapping("mymapping"),
char*k = (char*)mapviewoffile
现在我可以访问sample.txt 的值并通过k 更改它。但是,如何将另外 10 个字符的条插入/附加到文件中。
最佳答案
共享内存映射在创建时大小是固定的。您需要使用更大的映射大小再次调用 CreateFileMapping
。这将自动扩展文件,此时您可以再次MapViewOfFile
,并写入您想要的任何数据。请注意,您将需要更改文件映射的名称,除非您首先关闭其所有句柄和映射,从而破坏文件映射。
顺便说一句,使用由磁盘文件支持的命名文件映射是不寻常的(当然不是非法的)。一般来说,如果您要映射真实文件,则需要将 NULL
传递给 CreateFileMapping
的 lpName
参数。当您想要创建没有后备文件的共享内存映射时,您需要传入一个名称 - 即 hFile
将为 NULL
和 lpName
> 是共享内存段的名称。
关于c++ - 内存映射文件 - 如何在其他进程中插入一条数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003354/