- 締切済み
異なるプロセスですでに開かれているキューのオープンができません
現在、Linux(Suse10.3)の環境でPOSIXのメッセージキューを用いたプロセス間通信のプログラムを作成しています。 mq_openでメッセージキューをオープンしているのですが、 異なるプロセスですでに開かれているキューのオープンができません。 最初にオープンしたキューは受信専用、異なるプロセスでオープンするキューは送信専用です。 errnoを調べましたが、 EACCES("\nキューは存在するが、呼び出し元が指定されたモードでそのキ>ューをオープンする許可を持たない。")となっています。 プロセスAの第3引数についてはmode_t S_IRWXU=0x777;としていますが、この辺りの設定方法がよくわかりません。 例) <プロセスA(プロセスBより先に実行)> msqid = mq_open( "/sample001", O_RDONLY | O_CREAT, S_IRWXU, &mqattr); cout << "msqid:" << msqid << enld; msqid:3 <プロセスB> mqd = mq_open("/sample001", O_WRONLY); cout << "msqid:" << msqid << enld; msqid:-1 ///////////////////////////////////////////////////////////// //errnoは下記の通りです。 ///////////////////////////////////////////////////////////// EACCES(キューは存在するが、呼び出し元が指定されたモードでそのキ>ューをオープ>ンする許可を持たない。) 何か心当たりはありませんでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- cistronezk
- ベストアンサー率38% (120/309)
>プロセスAの第3引数についてはmode_t S_IRWXU=0x777;としていますが、この辺りの設定方法がよくわかりません。 S_IRWXU: 7000 ユーザー (ファイルの所有者) に読み込み、書き込み、実行の許可がある。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html だそうです。「700」であって「777」ではないようです。 確認ですが、プロセスAとBは同じユーザで起動していますか? もし、違うユーザで起動しているのなら、「S_IRWXO」が必要でしょう。実情に合わせて追加してみてください。
お礼
プロセスAとプロセスBは同じユーザーです。 mode_t S_IRWXU=0x777の記述はおかしかったですね。すみません。 mp_opneの第に引数を両方ともO_RDWRにして全体を見直しで無事オープン(mq_send,mq_recieveもOK)できました。 上記同一ユーザなので何故エラーになったのか不明です。 いろいろと有難うございました。