2016-07-19 3 views
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); 
} 
+1

おそらくメッセージがありません。キューにメッセージを送信するコードはどこに書きましたか? –

+0

まず、メッセージキューを作成してメッセージを送信するプログラムを実行します。次に、cmd ipcs -qを使って成功したかどうかを確認します。その後、私はそのメッセージを受け取る別のプロセスを開始します。 – hel

+1

'ipcs'の出力には、キューに入っているメッセージはありません。あなたは 'msgrcv()'に待たないように言ったので、返さなかったので、 "キューに入れられたメッセージはありません"を返しました。私は何を理解していないのですか? –

答えて

1

コメントを回答に転送します。

は私が提案:

たぶん待っているメッセージがありませんか?キューにメッセージを送信するコードはどこに書きましたか?

応答した

はまず、私は、メッセージ・キューを作成して、メッセージを送信するためのプログラムを実行します。次に、コマンドipcs -qを使用して、成功したかどうかを確認します。その後、私はそのメッセージを受け取る別のプロセスを開始します。

そして一寸逃れが始まった:

ipcsの出力は、キューに入れられたメッセージがないと言います。 msgrcv()には待機しないように指示したので、「キューに入れられたメッセージはありません」というメッセージが返されました。私は何を理解していないのですか?

そして、これは正しい診断だったようです。

関連する問題