我需要将一些数据 - char buffer[100000];
- 传输到由我启动的子进程。
现在我正在使用普通文件来执行此操作,父进程将数据写入磁盘上的文件,子进程从磁盘读取数据并删除文件。但是,这会导致不必要的磁盘写入,因此我想改用内存映射文件。
如何创建、写入内存映射文件,然后从内存映射文件中读取数据,除非使用页面文件或交换文件,否则不会将数据写入磁盘?
编辑: 我忘记指定我想使用原始 WINAPI 函数,所以代码没有依赖性。我正在研究如何做,准备好后我会自己发布答案,但如果有人有现成的代码,欢迎他们为我省力:)
最佳答案
调用时将INVALID_HANDLE_VALUE
作为文件句柄传递CreateFileMapping
:
If hFile is INVALID_HANDLE_VALUE, the calling process must also specify a size for the file mapping object in the dwMaximumSizeHigh and dwMaximumSizeLow parameters. In this scenario, CreateFileMapping creates a file mapping object of a specified size that is backed by the system paging file instead of by a file in the file system.
您可以使用匿名文件映射对象(将可继承的句柄传递给子进程),或使用命名文件映射。
关于c++ - 使用 Win32/WINAPI 通过内存映射文件传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047673/