メッセージキューに書き込んでいます
if (msgsnd(q, &msg, sizeof(message), slaves_list[to]) == -1)
と読書
if (msgrcv(q, &msg, sizeof(message), id, 0) == -1)
しかし、このキューが空の場合はどうなりますか?それを確認する方法は?ループ内に次の命令を実行したいものがない場合
メッセージキューに書き込んでいます
if (msgsnd(q, &msg, sizeof(message), slaves_list[to]) == -1)
と読書
if (msgrcv(q, &msg, sizeof(message), id, 0) == -1)
しかし、このキューが空の場合はどうなりますか?それを確認する方法は?ループ内に次の命令を実行したいものがない場合
を使用しIPC_NOWAIT
ます。ドキュメントから:
(msgflg & IPC_NOWAIT)
がゼロ以外の場合、呼び出し元のスレッドは、の戻り値とerrnoをに設定してすぐに戻り-1
ます[ENOMSG]
。
msgflgパラメーターにIPC_NOWAITを使用します:http://man7.org/linux/man-pages/man2/msgsnd.2.html
IPC_NOWAIT要求されたタイプのメッセージがキューにない場合、すぐに戻ります。errnoがENOMSGに設定されていると、システムコールが失敗します。
キューが空かどうかは、
ipcs
Linuxターミナルのコマンド。
作成したキューが表示されます。