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消息队列如何发送对向量的主要内容,如果未能解决你的问题,请参考以下文章

IPC消息队列溢出后果

IPC - 消息队列(Message Queue)- 使用

IPC - 消息队列(Message Queue)- 使用

IPC - 消息队列(Message Queue)- 使用

IPC - 消息队列(Message Queue)- 使用

IPC System V 消息队列 - 发送一个数组块