gpt4 book ai didi

为两个不同的进程创建共享内存

转载 作者:可可西里 更新时间:2023-11-01 10:26:14 26 4
gpt4 key购买 nike

因此,我尝试在 C 程序中创建一个共享内存段,这样我就可以在其中写入一个简单的字符,然后从另一个 C 程序中读取该字符。

我一直在尝试使用 calloc()malloc() 但我相信这只适用于该程序自己的 heap .

是否有另一个函数可以做同样的事情,但在 RAM 内存中?也许通过十六进制值?还是我错了,这些函数实际上保留了对所有进程可见的内存?

提前致谢。

编辑:-我正在使用 Windows 8。-语言不限于C,可以是任何其他语言。

最佳答案

有很多 Interprocess Communications当您需要在隔离的进程之间传输数据时,您可以选择。共享一 block 内存通常使用 file mapping 实现对象。

设置文件映射对象需要以下 API 调用序列:

  1. CreateFileMapping :这将创建文件映射对象。您可以传递一个唯一的名称(例如 GUID 的字符串表示形式),以便从其他进程轻松访问该对象。
  2. MapViewOfFile : 将文件的 View 映射到调用进程的地址空间。届时,只需写入内存 View 即可使用文件映射对象。

使用来自另一个进程的现有文件映射对象需要以下调用:

  1. OpenFileMapping : 打开现有文件映射对象的句柄。
  2. MapViewOfFile : 将文件的 View 映射到调用进程的地址空间。内存 View 中对内存的修改会反射(reflect)到该文件映射的所有 View 中。

请注意,通过跨进程的文件映射共享内存需要这些进程之间的同步。这个主题超出了这个答案的范围。 MSDN 提供了对 synchronization 的介绍.


MSDN 中也提供了示例代码: Creating Named Shared Memory .

关于为两个不同的进程创建共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com