在不同平台上通过管道传输数据的最佳和安全方式

Best and safe way to transfer data over a pipe on different platform

本文关键字:数据 最佳 方式 安全 传输 管道 平台      更新时间:2023-10-16

目前我正面临一个问题,我正在通过管道从x64 arch到x86 arch传递缓冲区对象。该对象还包含一些指针值,在x64中为8字节,而在x86中相同的指针大小为4字节。现在,当我通过管道传输对象时,它的大小比x86平台期望的相同对象多一点(因为这里的指针大小更小)。我可以从类似的帖子在这个论坛上理解,我可能需要使用序列化,但我不知道如何,因为我从来没有使用过序列化之前。序列化能解决这个问题吗?我使用c++与GCC编译器。我希望该产品可以在所有arch (ia64, x64或x86)上工作。

指针是指向本地运行程序的内存位置的地址*。将它发送给另一个程序是无用的,对于运行在另一台机器上的程序更是无用的,如果另一台机器的体系结构不同,则更是无用的。

在你的上下文中使用序列化意味着发送指针所指向的内容,而不是发送无意义的指针本身。

要实现跨架构数据发送,更简单的方法是使用文本进行数据传输。大多数(如果不是全部的话)广泛使用的跨架构协议使用文本:HTTP, IMAP, IRC…

*:我用program代替process

boost序列化是专门为:

在这里,我们使用术语"序列化"来表示可逆将任意一组c++数据结构解构为a字节序列。这样的系统可以用来重建一个另一个程序上下文中的等效结构。取决于上下文,这可能使用实现对象持久化,远程参数传递或其他功能。在这个系统中,我们使用术语"archive"来引用该字节流的特定呈现。它可以是二进制数据、文本数据、XML或其他文件由该库的用户创建。

顺便说一下,使用POD结构,并确保使用特定类型的数据类型。为此,请使用预定义类型(例如,请看这里)

http://code.google.com/apis/protocolbuffers/

协议缓冲区是Google用于序列化结构化数据的与语言无关、与平台无关的可扩展机制——想想XML,但更小、更快、更简单。你定义了你想要的数据结构,然后你可以使用特殊生成的源代码来轻松地从各种数据流中读写你的结构化数据,并使用各种语言——Java、c++或Python。

适用于x86/64,手臂