在Solaris中的父进程和子进程之间共享内存(在C中)

问题描述:

我只是在寻找一个简单的教程/示例来使我朝正确的方向发展,但似乎找不到一个好的简单教程。在Solaris中的父进程和子进程之间共享内存(在C中)

我找一个父母和孩子之间的教程,说明如何共享内存(不使用管道和文件,但实际内存)(用叉子)在UNIX(Solaris)上的过程中C.

我真的很感谢你的帮助,

非常感谢你,

Jary

+1

您是否尝试过使用护目镜?这是第一次点击:http://www.cs.cf.ac.uk/Dave/C/node27.html – 2010-11-06 05:39:31

+0

谢谢。我看过谷歌,但只有复杂的例子。这是我找到的最好的,但我想知道是否有人有更好的。 – Jary 2010-11-06 05:53:04

+0

我怀疑这个例子实际上是用于Solaris的。 – Jary 2010-11-06 06:00:50

你必须选择:

  • 您可以先分配和附加共享内存,然后执行分支。

  • 您可以分配共享内存,fork子进程,然后在两个进程中连接到共享内存。

第一个选项可能更容易。它可能如下所示:

#include <sys/types.h> 
#include <sys/ipc.h> 
#include <sys/shm.h> 

.... 

int size = 32000; 

/* allocate and attach shared memory */ 
int shmID = shmget(IPC_PRIVATE, size, 0600); 
void* shmPtr = shmat(shmId, NULL, 0); 

/* fork child process */ 
pid_t pID = fork(); 
if (pID == 0) 
{ 
    /* child */ 
    ... do something with shmPtr ... 

    /* detach shared memory */ 
    shmdt(shmPtr); 
} 
else 
{ 
    /* parent */ 
    ... do something with shmPtr ... 

    /* detach shared memory */ 
    shmdt(shmPtr); 
} 
+0

非常感谢!我有一个微妙的问题:用这种方法,是否有可能父母检查共享内存时,请存在孩子?我的意思是,小孩调用exit(),但我想从0返回到4个值。父母是否有可能使用sigaction()并在函数调用中读取共享内存(从存在子时存在的中断)? – Jary 2010-11-06 14:44:32

+0

是的,这应该是可能的。 – Codo 2010-11-06 17:19:35

+0

非常感谢。我会尝试你的代码,再次感谢! – Jary 2010-11-06 20:47:28