2012-12-20 114 views
1

我想2个进程 的结构之间发送和接收消息如下IPC消息队列如何发送对

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到另一个r变量并打印它的值 我得到垃圾。

如何正确发送和接收此结构?

+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