0
POSIX4メッセージキューを使用しようとしています。だから、mq_open
を使用してキューを作成し、すべてのオプションに対して、私が入力するstruct mq_attr
を入力します。POSIX4メッセージキュー "mq_open:そのようなファイルまたはディレクトリがありません"
私はO_CREATE
フラグを入れている間、彼はキューを見つけることができません。
...
/***
* Queues' names
*/
#define GUI_QUEUE "/guiQ"
...
struct mq_attr attrAct; /* Queue parameters */
/***
* Message queue to send action
*/
attrAct.mq_maxmsg=1;
attrAct.mq_msgsize=sizeof(gui_action);
attrAct.mq_flags=0;
attrAct.mq_curmsgs=0;
printf("serveur first sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), attrAct.mq_msgsize);
if ((guiQue=mq_open(GUI_QUEUE, O_CREAT | O_NONBLOCK | O_WRONLY
, S_IWUSR | S_IRUSR , &attrAct))!=0) {
perror("mq_open");
exit(EXIT_FAILURE);
}
if (mq_getattr(guiQue, &attrAct)!=0) {
perror("mq_getattr");
}
else {
printf("serveur second sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), attrAct.mq_msgsize);
}
struct mq_attr new;
new=attrAct;
new.mq_msgsize=sizeof(gui_action);
printf("serveur third sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), new.mq_msgsize);
if (mq_setattr(guiQue, &new, &attrAct)!=0) perror("mq_setattr");
if (mq_getattr(guiQue, &attrAct)!=0) {
perror("mq_getattr");
}
else {
printf("serveur fourth sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), attrAct.mq_msgsize);
}
...
そして、ここで出力されます:ここで
は私のコード(無インデント行はデバッグコードです)ある
serveur first sizeof(gui_action) : 16 msgsize : 16
mq_open: No such file or directory
私が間違って何をしているのですか?
ファイルシステムのルート上でキューを開こうとしました。コードにはそのような権限がありませんでした。 – t0mm13b
はい、 '' guiQ/''や '' guiQ "'を置くと引数エラーが無効になります。だから、どのように私はユーザー空間でmqを開くことができますか? ( 'sudo'であっても動作しません) – Phantom
コンパイルされた実行可能コードが存在するディレクトリを確認してください。そこに 'guiQ'がありますか?そうでなければ、より多くのデバッグ情報を提供する必要があります。 ?つまり、 '/'はそれを持つ正しい場所ではありません。 – t0mm13b