IPC消息队列如何发送对向量
Posted
技术标签:
【中文标题】IPC消息队列如何发送对向量【英文标题】:IPC message queues how to send a vector of pairs 【发布时间】:2012-12-07 11:17:18 【问题描述】:我正在尝试在 2 个进程之间发送和接收消息 结构如下
struct _st
long _var1;
int _var2;
int _var3;
int _var4;
int _var5;
vector <pair<int,int> > _var6;
;
我的发送代码是
send_val = msgsnd(msgqid, &message, sizeof(message), !IPC_NOWAIT);
我是这样收到的
rec_val = msgrcv(msgqid, &message, sizeof(message), 0, !IPC_NOWAIT);
当我将收到的消息中的 _var6 分配给另一个变量并打印它的值时 我得到了垃圾。
我怎样才能正确发送和接收这个结构?
【问题讨论】:
你的消息变量是什么类型的? 【参考方案1】:_st
不是 POD,您不能简单地通过 IPC 发送而不对其进行序列化/反序列化。您实际上是通过 IPC 而不是其内容发送 _var6 内部指针。
sizeof(message)
只会得到静态的_st
结构体大小,它不包括_var6
的内容大小。
需要在msgsnd之前手动序列化_st
,在msgrcv之后反序列化。
看看http://www.boost.org/doc/libs/1_52_0/libs/serialization/doc/index.html
【讨论】:
以上是关于IPC消息队列如何发送对向量的主要内容,如果未能解决你的问题,请参考以下文章