c++ - 内存映射文件 - 如何在其他进程中插入一条数据

标签 c++ c memory-management ipc memory-mapped-files

我的文件(sample.txt)有 10 个字符。我以写入模式打开文件,并完成了 createfilemapping("mymapping")。然后我通过 getchar 保存该进程。 然后打开另一个进程执行以下操作

openfilemapping("mymapping"),
char*k =  (char*)mapviewoffile 

现在我可以访问sample.txt 的值并通过k 更改它。但是,如何将另外 10 个字符的条插入/附加到文件中。

最佳答案

共享内存映射在创建时大小是固定的。您需要使用更大的映射大小再次调用 CreateFileMapping。这将自动扩展文件,此时您可以再次MapViewOfFile,并写入您想要的任何数据。请注意,您将需要更改文件映射的名称,除非您首先关闭其所有句柄和映射,从而破坏文件映射。

顺便说一句,使用由磁盘文件支持的命名文件映射是不寻常的(当然不是非法的)。一般来说,如果您要映射真实文件,则需要将 NULL 传递给 CreateFileMappinglpName 参数。当您想要创建没有后备文件的共享内存映射时,您需要传入一个名称 - 即 hFile 将为 NULLlpName > 是共享内存段的名称。

关于c++ - 内存映射文件 - 如何在其他进程中插入一条数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003354/

相关文章:

c - SSE 中浮点到 uchar 的转换问题

iOS 8.3 - CoreGraphics 图像绘制中的 EXC_BAD_ACCESS

ios - NSZombies 在未启用时崩溃,在启用时工作

memory-management - 在 Intel 的扩展页表 (EPT) 中,TLB 是否将客户虚拟地址缓存到客户物理地址?

c++ - C++ 数组中的最大值

c - 为什么我们应该或不应该更喜欢接受参数的宏而不是做同样工作的函数?

c++ - 调用其他程序的程序

清理linux目录下的文件

c++ - C++ 中的 ASCII 用户界面 w/Unix PuTTY 终端使用转义序列

c++ - 多维 cv::Mat 的逗号分隔初始值设定项