【问题标题】:Sharing memory among a parent and child process in Solaris (in C)在 Solaris 中的父进程和子进程之间共享内存(在 C 中)
【发布时间】:2010-11-06 05:27:26
【问题描述】:

我只是在寻找一个简单的教程/示例来指引我正确的方向,我似乎找不到一个好的简单的。

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

非常感谢您的帮助,

非常感谢,

杰瑞

【问题讨论】:

  • 你试过护目镜吗?这是第一个命中:cs.cf.ac.uk/Dave/C/node27.html
  • 谢谢。我看过谷歌,但只有复杂的例子。这是我找到的最好的,但我想知道是否有人有更好的。
  • 我怀疑这个例子实际上是针对 Solaris 的。

标签: c solaris shared-memory


【解决方案1】:

你必须选择:

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

  • 您可以分配共享内存,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);
}

【讨论】:

  • 非常感谢!我有一个微妙的问题:使用这种方法,当孩子存在时,父母是否可以检查共享内存?我的意思是,孩子调用 exit(),但我想从 0 到 4 个值返回。父母是否可以使用 sigaction() 并在函数调用中读取共享内存(当孩子存在时从中断中读取)?
  • 是的,应该可以的。
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2017-03-15
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2010-09-18
相关资源
最近更新 更多