我的文件(sample.txt)有10个字符。我在写模式下打开了文件,完成了createfilemapping("mymapping")
。然后我通过getchar保持这个过程。
然后打开另一个进程,执行以下操作
openfilemapping("mymapping"),
char*k = (char*)mapviewoffile
现在我可以访问sample.txt的值并通过k更改它。但是,如何在文件中插入/附加另外10个字符的条带。
答案 0 :(得分:3)
共享内存映射在创建时的大小是固定的。您需要使用更大的映射大小再次调用CreateFileMapping
。这将自动扩展文件,此时您可以再次MapViewOfFile
,并写入您想要的任何数据。请注意,除非先关闭所有句柄和映射,否则需要更改文件映射的名称,以便销毁文件映射。
顺便说一下,使用磁盘文件支持的命名文件映射是不寻常的(当然不是非法的)。通常,如果您要映射真实文件,则会将NULL
传递给lpName
的{{1}}参数。当您想要创建没有后备文件的共享内存映射时,您将传入一个名称 - 也就是说,CreateFileMapping
将是hFile
而NULL
是共享内存段的名称