1

次のように、構造体の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 を別の変数に割り当ててその値を出力すると、ガベージが発生します。

この構造体を正しく送受信するにはどうすればよいですか?

4

1 に答える 1

3

_stシリアル化/逆シリアル化せずにIPCを介して送信することはできないPODではありません。実際には、コンテンツではなくIPCを介して_var6内部ポインタを送信しています。

sizeof(message)静的な構造体サイズのみを取得します。_stコンテンツサイズは含まれません_var6_stmsgsndの前に手動でシリアル化し、msgrcvの後で逆シリアル化する必要があります。

http://www.boost.org/doc/libs/1_52_0/libs/serialization/doc/index.htmlをご覧ください

于 2012-12-20T01:07:42.987 に答える