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