2016-09-10 13 views
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 

私が間違って何をしているのですか?

+0

ファイルシステムのルート上でキューを開こうとしました。コードにはそのような権限がありませんでした。 – t0mm13b

+0

はい、 '' guiQ/''や '' guiQ "'を置くと引数エラーが無効になります。だから、どのように私はユーザー空間でmqを開くことができますか? ( 'sudo'であっても動作しません) – Phantom

+0

コンパイルされた実行可能コードが存在するディレクトリを確認してください。そこに 'guiQ'がありますか?そうでなければ、より多くのデバッグ情報を提供する必要があります。 ?つまり、 '/'はそれを持つ正しい場所ではありません。 – t0mm13b

答えて

関連する問題