Solaris + Cです。
プロセス間通信でmsgsnd( )、msgrcv( )を使用しています。
プロセスAからmsgsndで送信した際に、送信電文のサイズは32バイトと設定しています。
msgsnd(iQue,&stmsg,32,IPC_NOWAIT );
また、受信するプロセスBでも受信した電文のサイズ(rcvmsgの戻り値)は32バイトと認識しており、受信用のバッファ(下記 gRecv)も32バイト分用意しています。
msgrcv(iMyQue,&gRecv,32,0,MSG_NOERROR);
しかし、電文の受信(msgrcv)の前後で確認したところ、受信用に用意しているgRecvのすぐ後ろの領域を破壊していることが判明しました。
※gRecvの中身にはプロセスAから送信した内容が正しく入っています。
msgrcv,msgsndの使用方法に誤りがあるのでしょうか?
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を含めて)が送受信できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ビジネスマナー・ビジネス文書 応募したバイト先から、電話で、適性検査をインターネット上で受けてほしいと言われました。その後メールで 1 2022/10/27 14:46
- Gmail GmailでのPOPメールの保存先はどこなのか 3 2022/06/09 02:06
- Gmail gmailで独自ドメインアドレスのメールが届かない件 1 2023/08/25 23:24
- docomo(ドコモ) +メッセージの送受信。 au(uq mobile)のデータ回線でdocomoの電話番号の+メッセージ 2 2022/09/14 16:09
- その他(メールソフト・メールサービス) メールボックスのストレージ容量がほぼいっぱいです というメールが来ました 2 2022/07/01 16:47
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- UNIX・Linux redmineにメールを飛ばす方法 1 2022/09/13 22:02
- 所得税 電子税?のメールについて教えてください 8 2022/09/04 21:38
- ドライブ・ストレージ RS232C 通信でエラー(受信が正確でない)がでます。どなたか教えてくださいませ。 11 2022/09/03 11:53
- Gmail 会社のメルアドから個人のGmailアドレスに送ったら、「このメールにはご注意ください」と警告が出た 2 2022/05/26 15:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UDP受信時の通信異常検知について
-
TCP/IP のパケットの分断と結合...
-
Outlookの「受信日時」「件名」...
-
シリアル通信時のデータ受信方法
-
無線LAN、SIFSについて
-
Outlookの「受信日時」「送信者...
-
C#にてCTI。RS232Cの受信と送信...
-
パソコンに詳しい方教えて下さ...
-
Windows上のファイル操作の履歴...
-
バッチファイルでディレクトリ...
-
excel vba で 実行時エラー13...
-
sendmail .ユーザ名.popとユー...
-
バックアップ
-
cronからtarで圧縮しようとする...
-
BIND9 nsupdateができない
-
sftp時の公開鍵認証
-
アプリケーションが見つかりません
-
ARCserveの復元方法
-
ipadで社内ネットワークに接続
-
Zipファイルをエクセルに指定変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
RS232cを用いた送信プログラム
-
UDP受信時の通信異常検知について
-
ASP.NET C#でPOST受信
-
シリアル通信時のデータ受信方法
-
Outlookの「受信日時」「送信者...
-
TCPでパケットロス?
-
TCPのプログラミングで質問…と...
-
recv関数の戻り値について
-
DHCPOFFERの受信について
-
msgrcv( )で領域破壊?
-
パケット受信 recvfrom( )につ...
-
「TCPは全二重可能」の意味
-
C#にてCTI。RS232Cの受信と送信...
-
CRC-CCITTに関しての仕様とサン...
-
MTUで!!
-
PC98で232c送信winndowで受信で...
-
VB2010で、シリアル通信の方法...
-
winsockを使ったTCP及びUDP通信...
おすすめ情報