c++ - 使用 Win32/WINAPI 通过内存映射文件传输数据

标签 c++ windows winapi memory-mapped-files

我需要将一些数据 - 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/

相关文章:

python - 使用 Visual Studio Code 时出现 ModuleNotFoundError

c++ - win32 c++ 我想在 STATIC 标签的 TEXT 之后直接插入一个 EDIT 控件

c++ - urdl 编译错误

c++ - 没有比较的多集?

c++ - QTextEdit更新单个QTextCharFormat

winapi - 检查 Windows 帐户的用户名和密码

c# - 在 C# 中如何将 IP 地址字符串解析为 uint 值?

c++ - STL vector 和线程安全

c++ - Windows 中的 wxwidgets 错误

ruby - 错误 : spawn ENOENT: missing the sass executable