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

时间:2013-06-14 17:25:39

标签: c windows shared-memory

所以,我试图在C程序中创建一个共享内存段,所以我可以在其中编写一个简单的字符,并从另一个C程序中读取该字符。

我一直在尝试使用calloc()malloc(),但我相信这只适用于此计划的heap

还有其他功能可以做同样的事情,但在RAM内存中?也许通过十六进制值?或者我错了,这些函数实际上保留了所有进程可见的内存?

提前致谢。

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

2 个答案:

答案 0 :(得分:2)

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

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

  1. CreateFileMapping:这会创建文件映射对象。您可以传递唯一名称(例如GUID的字符串表示),以便从其他进程轻松访问此对象。
  2. MapViewOfFile:将文件映射视图映射到调用进程的地址空间。此时,只需写入内存视图即可使用文件映射对象。
  3. 使用来自其他进程的现有文件映射对象需要以下调用:

    1. OpenFileMapping:打开现有文件映射对象的句柄。
    2. MapViewOfFile:将文件映射视图映射到调用进程的地址空间。内存视图中对内存的修改将反映在该文件映射的所有视图中。
    3. 请注意,跨进程通过文件映射共享内存需要在这些进程之间进行同步。本主题超出了本答案的范围。 MSDN提供了对synchronization的介绍。

      <小时/> MSDN中也提供了示例代码:Creating Named Shared Memory

答案 1 :(得分:0)

没有标准的方法可以做到这一点。如果您正在使用Unix / Linux,我建议您查看我的shared memory malloc实现,它在Windows机器上可以使用Cygwin,但它实际上是为Unix设计的。