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

时间:2011-02-15 11:59:35

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

顺便说一下,使用磁盘文件支持的命名文件映射是不寻常的(当然不是非法的)。通常,如果您要映射真实文件,则会将NULL传递给lpName的{​​{1}}参数。当您想要创建没有后备文件的共享内存映射时,您将传入一个名称 - 也就是说,CreateFileMapping将是hFileNULL是共享内存段的名称