IPC消息排队如何发送对向量

时间:2012-12-20 00:47:35

标签: c++ unix vector ipc message-queue

我正在尝试在两个进程之间发送和接收消息 结构如下

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 个答案:

答案 0 :(得分:3)

_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