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



我正在尝试在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从接收到的消息分配给另一个变量并打印其值时我有垃圾。

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

_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

最新更新