在 C 中的进程间通信中传递结构

Posted

技术标签:

【中文标题】在 C 中的进程间通信中传递结构【英文标题】:Passing structs in Interprocess Communication in C 【发布时间】:2020-08-31 15:50:24 【问题描述】:

我有一个在 windows 和 ubuntu linux 上运行的 C 程序。 它创建了两个并行运行的进程。

必须在两个进程之间建立进程间通信,在它们之间传递 C 结构(也可以嵌套)。该结构将具有一些运行时参数值。 我应该使用哪个 IPC?

如果我使用 zmq,那么在 C(非 C++)上使用任何序列化库?

【问题讨论】:

C++ 代码可以链接到 C 代码,所以我不认为“仅限 C”是一项要求。在 C++ 方面,结构必须是extern C,以保持二进制兼容,但您可以使用任何您想要的 C++ 代码处理它们,然后将 C 项目与执行序列化的 C++ 代码链接。“仅 C”为仅当某些嵌入式平台不支持 C++ 时,该要求才有意义。 Windows 和 Ubuntu 都可以毫无问题地处理 CC++ 互操作。 感谢 Reinstate 的建议。但它是客户端代码,编译器设置为 GCC,我们无法更改。 GCC,GNU 编译器集合。 GNU Compiler Collection 包括 C、C++ 的前端 GCC 编译 C++ 代码,而且您将链接到一个公开 C API 的库,即使该库本身是用 C++ 编写的。在许多情况下,Linux 上的 C 项目已经链接到用 C++ 编写的库,而您甚至都不知道它,因为它不会强加任何额外的要求。图书馆是一个黑盒子——你看不到它的内容。 MinGW 是否需要“-lstdc++”或类似的东西?无论如何,我认为该错误不一定与您选择的库有关。更广泛地说,选择 IPC 技术并没有真正开启传递结构的需要——这是序列化的问题,而不是 IPC 本身的问题。 IPC 的选择取决于设计要求——您需要什么样的冗余(如果有)?什么样的负载分担?传输中的数据是否应该是持久的,如果是的话,在哪里?是否需要点对点或分布语义等。这些都与序列化无关。 【参考方案1】:

nanomsg 和 nng (nanomsg-next-gen) 是用于 C 的 zmq 的开源替代品。还有许多其他语言的绑定;如 C++、ruby、java、go、python 等。

【讨论】:

我们可以使用它传递嵌套结构吗 如果嵌套结构包含指向另一个结构的指针,否;否则是的。

以上是关于在 C 中的进程间通信中传递结构的主要内容,如果未能解决你的问题,请参考以下文章

Linux-进程间通信

Linux-进程间通信

Linux-进程间通信

Linux 进程间通信-管道

请教一个Linux下C语言的进程间的信号问题

linux进程间的通信(C): 共享内存