Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为两个不同的进程创建共享内存_C_Windows_Shared Memory - Fatal编程技术网

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

C 为两个不同的进程创建共享内存,c,windows,shared-memory,C,Windows,Shared Memory,所以,我试图在一个C程序中创建一个共享内存段,例如,我可以在其中写入一个简单的字符,然后从另一个C程序中读取该字符 我一直在尝试使用calloc()和malloc(),但我相信这只适用于这个程序自己的堆 除了内存中的RAM外,是否还有其他功能可以执行同样的操作?可能是通过十六进制值?还是我错了,这些函数实际上保留了所有进程都可见的内存 提前谢谢 编辑: -我正在使用Windows8。 -语言不限于C语言,可以是任何其他语言。没有标准的方法。如果您在Unix/Linux上工作,我建议您看看我的实现

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

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

除了内存中的
RAM
外,是否还有其他功能可以执行同样的操作?可能是通过十六进制值?还是我错了,这些函数实际上保留了所有进程都可见的内存

提前谢谢

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

没有标准的方法。如果您在Unix/Linux上工作,我建议您看看我的实现,它在windows机器上的Cygwin上确实可以工作,但实际上是为Unix设计的。

当您需要在独立进程之间传输数据时,您可以选择许多实现。共享内存块通常使用对象实现

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

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

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



    MSDN中也提供了示例代码:。

    如果是linux,您可能需要了解
    mmap
    。@VoidPointer我使用的是windows 8。+1如果您了解linux,安装cygwin是访问(某种程度上)熟悉环境的超级简单的方法。如果您没有任何有用的帮助,请不要回答。详尽地回答了这个问题。也可以在Windows上使用。为什么我要把我的声誉浪费在那些完全没有相关背景的作者所写的答案上?