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

时间:2010-11-06 05:27:27

标签: c solaris shared-memory

我只是在寻找一个简单的教程/示例,让我朝着正确的方向前进,我似乎无法找到一个简单的方法。

我正在寻找一个教程,解释如何在C中的UNIX(Solaris)中的父级和子级(使用fork)进程之间共享内存(不使用管道和文件,但实际内存)。

我非常感谢你的帮助,

非常感谢,

Jary

1 个答案:

答案 0 :(得分:2)

你必须选择:

  • 您可以先分配和附加共享内存,然后再进行分叉。

  • 您可以分配共享内存,分叉子进程,然后在两个进程中附加到共享内存。

第一种选择可能更容易。它可能如下所示:

#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);
}