通过unix域套接字传递结构

我正在使用Unix域套接字(AF_UNIX)作为不同进程之间的IPC的select项目。

当我想将数据结构从一个进程传递到另一个进程时,是否需要对数据结构进行序列化(如在此问题中所述)( 通过C中的套接字传递结构 )?

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

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

如果结构是自包含的类型,那么不需要处理,您可以调用write()或send()将数据推送到套接字中。

如果结构不是独立的(例如,如果它包含指针或平台特定的数据类型)

如果这两个进程有可能具有不同的比特性(例如,32位可比较的64位),那么你会需要注意结构是精确定义的,使得ti在两种形式中都是相同的。

在这种情况下序列化是不必要的。 每个操作系统和CPU架构的组合都将有一个相当明确的ABI,说明如何在内存中布置结构等。 这严重限制了编译器允许改变的次数,有一个很好的理由 – 更改ABI,所有预编译的库停止工作。 所以如果你用相同的编译器编译东西,那么结构的内存中布局将是相同的。

可以肯定的是,只要记住在重大操作系统更新的情况下重建双方ABI更改(它永远不会,但可能会发生一天)。