在不同平台上通过管道传输数据的最佳且安全的方法
目前我面临一个问题,我正在通过管道从 x64 arch 传递缓冲区对象到 x86 arch。该对象还包含一些指针值,在 x64 中为 8 个字节,而在 x86 上相同的指针大小为 4 个字节。现在,当我通过管道传输对象时,它的大小比 x86 平台对同一对象的预期要大一些(因为这里的指针大小较小)。我可以从这个论坛的类似帖子中了解到,我可能需要使用序列化,但我不知道如何使用,因为我以前从未使用过序列化。序列化能解决这个问题吗?我正在使用 C++ 和 GCC 编译器。我希望该产品能够在所有架构(ia64、x64 或 x86)上运行。
Currently I am facing an issue where i am passing a buffer object over a pipe from x64 arch to x86 arch. The object also contains some pointer values, which is 8 bytes in x64 which the same pointer size on x86 is 4 bytes. Now when i am transmitting the object over pipe then size of it is bit more than what x86 platform was expecting for the same object (because pointer size in here is less). What i could understood from similar post in this forum that i might need to use serialization but i do not know how as i have never used serialization before. Will serialization will solve this problem? I am using C++ with GCC compiler. I want the product would work on all arch (ia64, x64 or x86).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
指针是指向本地运行程序*内的内存位置的地址。将其发送到另一个程序是没有用的,对于在另一台机器上运行的程序更无用,如果另一台机器的体系结构不同则更无用。
在上下文中使用序列化意味着发送指针所指向内容的内容,而不是发送无意义的指针本身。
要实现跨架构的数据发送,更容易的是使用文本进行数据传输。大多数(如果不是全部)广泛使用的跨体系结构协议都使用文本:HTTP、IMAP、IRC ...
*:我使用
program
而不是process
。A pointer is an address to a memory location within your local running program*. It is useless to send it to another program, more useless to a program running on another machine, even more useless if the architecture of the other machine is different.
Using serialization in your context means sending the content of what is pointed to by the pointer instead of sending the meaningless pointer itself.
To achieve cross-architecture data sending, the easier is to use text for data transfers. Most if not all of widely used cross-architecture protocols use text: HTTP, IMAP, IRC ...
*: I use
program
instead ofprocess
.Boost 序列化专门设计用于:
顺便说一下,使用 POD 结构,并确保使用特定类型的数据类型。为此,请使用预定义类型(例如,请查看此处)
boost serialization is designed specifically to :
By the way, use POD structures, and make sure to have use data types of a specific type. For that use predefined types (for example, take a look here)
http://code.google.com/apis/protocolbuffers/
在 x86/64、arm 上为我工作
http://code.google.com/apis/protocolbuffers/
Worked for me on x86/64, arm