Boost 在两个进程(C 和 C++)之间的 managed_shared_memory 用法

Boost's managed_shared_memory usage in between two processes (C and C++)

我在使用 Boost managed_shared_memory 时遇到 Design/Implementation 问题。

问题

我有两个进程:WriterReader

Note 1: (This Reader is not using any boost shm API, as it's C application )
Note 2: I validated address is same on Writer and Reader (after communication).

但是 Reader 读取 shm 数据的 memcpy 导致我的可执行文件 (Reader) 崩溃。


问题

  1. 我们可以在 C 中使用 boost::interprocess::managed_shared_memory 吗??
  2. 上面的实现有没有问题。 (Reader 无法通过指针访问 Writer 的 shm)
  3. 有没有办法像任何包装器实现等一样解决此 C 和 C++ 限制

Q. Can we use boost::interprocess::managed_shared_memory in C ??

没有。从技术上讲,你当然可以(C 是图灵完备的),但它不受支持。

Q. Is there any implementation problem in above section. (can't a reader access shm of writer via pointer)

是的,您不能有效地将指针从一个进程传递到另一个进程,因为它们具有隔离地址 space。

Q. Is there a way to solve this C and C++ limitation like any wrapper implementation etc.

通常的方法是将数据作为消息的一部分在进程之间传递。使用您的消息传递库(http://man7.org/linux/man-pages/man7/mq_overview.7.html, http://zeromq.org/,等等)。

注意这也避免了同步访问共享内存的麻烦,您甚至没有谈到。这让我想到了你没有想到的想法

下一个最好的想法是在两侧使用原始 shm API 并将 offset 跨进程传递到共享内存区域。如果您限制自己使用,例如,您仍然可以使用 BIP。 shared_memory_object and e.g. offset_ptr