1

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

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 分配给另一个变量并打印它的值时,我得到了垃圾。

我怎样才能正确发送和接收这个结构?

4

1 回答 1

3

_st不是 POD,您不能简单地通过 IPC 发送而不对其进行序列化/反序列化。您实际上是通过 IPC 而不是其内容发送 _var6 内部指针。

sizeof(message)只会获得静态_st结构大小,它不包括_var6. 您需要_st在 msgsnd 之前手动序列化并在 msgrcv 之后对其进行反序列化。

看看http://www.boost.org/doc/libs/1_52_0/libs/serialization/doc/index.html

于 2012-12-20T01:07:42.987 回答