我正在尝试在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