• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:msgrcv( )で領域破壊?)

msgrcv( )で領域破壊?

このQ&Aのポイント
  • Solaris + Cでのプロセス間通信でmsgsnd( )、msgrcv( )を使用しています。
  • プロセスAからmsgsndで送信した電文のサイズは32バイトで、受信用のバッファ(gRecv)も32バイト分用意しています。
  • しかし、msgrcvの前後で受信用バッファの後ろの領域が破壊されていることが判明しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

>msgrcv,msgsndの使用方法に誤りがあるのでしょうか? はい、誤っています。 電文を送信するときの第3パラメータ(=32)は、以下の構造体の場合、のmtextのサイズを渡す必要があります。 struct msgbuf { long int mtype; /* message type */ char mtext[1]; /* message text */ } 従って32を指定した場合は、mtypeのサイズ+32バイトが、送り出されます。(32ビットモードでは36バイト) 受信の場合も同様に、36バイトを受信することになります。 従って、 struct msgbuf *msg; として、 msgsnd(iQue,&stmsg,32-sizeof(msg->mtype),IPC_NOWAIT ); msgrcv(iMyQue,&gRecv,32-sizeof(msg->mtype),0,MSG_NOERROR); とすれば、32バイト(mtypeを含めて)が送受信できます。

mkob
質問者

お礼

解決しました。 ありがとうございました。

関連するQ&A