通过unix域套接字传递结构

时间:2015-09-03 03:35:38

标签: c linux sockets

我正在开发一个使用Unix域套接字(AF_UNIX)作为不同进程之间IPC选择的项目。

当我想将数据结构从一个进程传递到另一个进程时,是否需要对此问题(Passing a structure through Sockets in C)中提到的数据结构进行序列化?

由于这些进程是使用相同的编译器编译并在同一台机器上运行的,因此应该没有字节顺序,也没有不同的填充问题。所以我不确定序列化是否必要。

2 个答案:

答案 0 :(得分:4)

您只需要确保收到的结构是可理解的。

如果结构由自包含类型组成,则不需要处理,只需调用write()或send()将数据推送到套接字。

在结构不是自包含的情况下需要序列化(例如,如果它包含指针或特定于平台的数据类型)

如果两个进程有可能具有不同的位 (例如32位访问64位)或不同的字节顺序,你需要注意结构是明确定义的,以便在两种形式中都使用相同的二进制表示。

答案 1 :(得分:1)

在这种情况下不需要序列化。每个操作系统和CPU架构组合都有一个非常明确的ABI,它说明了结构等在内存中的布局。这严重限制了编译器允许更改周围事物的数量,并且有充分理由 - 更改ABI并且所有预编译库都停止工作。因此,如果使用针对相同体系结构的相同编译器编译内容,结构的内存中布局将是相同的。

可以肯定的是,只要记住在主要操作系统更新时重建双方,以防ABI发生变化(从未发生变化,但可能会在某一天发生)。