不同流程的共享结构

时间:2013-01-27 23:53:32

标签: c parallel-processing exec fork shared-memory

我需要在C / C ++中定义不同可执行文件之间的共享结构。我怎样才能做到这一点? 在我的starter.c文件中:

pid_t child = fork();
if (child > 0) {
  // Parent.
  ... // detach shared memory
  argv[0] = "./app1";
  execv(argv[0], argv);
}
else {
  // Child.
  argv[0] = "./app2";
  execv(argv[0], argv);
}
  • start.h - >定义共享结构
  • start.c - >创建对象和fork(如上面的代码)
  • app.c - >使用共享结构

更新:

  • 如果我在 start.h 定义一个类,我会遇到分段错误, 在共享内存中使用 fork()创建它(使用MAP_SHARED),并在app1.c中访问它的成员(如shared_class-> s)

  • 所以问题是:如何保持exec之后的类/变量?

2 个答案:

答案 0 :(得分:0)

如果您有共享结构,为什么不在单独的.h(标头)文件中声明它并将其作为头文件包含在您的starter.c和app.c C文件中。

如果你必须独立编译它们,你可以继续使用共享内存。如果您将结构加载到共享内存中,那么您的两个进程都可以毫无问题地访问它们!

答案 1 :(得分:0)

不知道你正在使用什么平台。

如果是linux。 您可以使用mmap

首先使用shm_open创建共享内存映射文件。

然后将其映射到您创建的每个可执行文件中。

在共享内存中写入/读取结构。

您的所有进程都可以访问相同的共享内存。

您可能需要找到一些mmap教程。