1
System Vメッセージキューは、正常に作成ipcs -q
指令を出力さん:はなぜにmsgrcvは返しENOMSG
------ Message Queues --------<
key msqid owner perms used-bytes messages
0x080b2fb4 0 hel 600 0 0
をしかし、メッセージを受信するためのプログラムが返されます。
終了:のmsgrcvエラーのないメッセージを所望のタイプ
これは私のコードです:
/* create key for message queue */
key = ftok("/home/hel/messageQueueSystemV", 8);
if (key == -1) {
printf("exit: ftok error, %s\n", strerror(errno)); // error
exit(0);
}
/* open existed message queue */
mqFd = msgget(key, 0600);
if (mqFd < 0) {
printf("exit: msgget error, %s\n", strerror(errno)); // error
exit(0);
}
/* receive a message */
if (msgrcv(mqFd, &buf, 1 + sizeof(short), 0, IPC_NOWAIT) < 0) { // type is 0
printf("exit: msgrcv error, %s\n", strerror(errno)); // error
exit(0);
}
おそらくメッセージがありません。キューにメッセージを送信するコードはどこに書きましたか? –
まず、メッセージキューを作成してメッセージを送信するプログラムを実行します。次に、cmd ipcs -qを使って成功したかどうかを確認します。その後、私はそのメッセージを受け取る別のプロセスを開始します。 – hel
'ipcs'の出力には、キューに入っているメッセージはありません。あなたは 'msgrcv()'に待たないように言ったので、返さなかったので、 "キューに入れられたメッセージはありません"を返しました。私は何を理解していないのですか? –