1

我需要在 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 -> 创建对象和分叉(如上面的代码)
  • app.c -> 使用共享结构

更新:

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

  • 所以问题是:如何在执行后保持类/变量不变?

4

2 回答 2

0

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

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

于 2013-01-28T01:16:05.557 回答
0

不知道你用的是什么平台。

如果是linux的话。您可以使用mmap

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

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

向/从共享内存写入/读取您的结构。

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

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

于 2013-01-28T01:47:36.360 回答