4

メッセージキューに書き込んでいます

if (msgsnd(q, &msg, sizeof(message), slaves_list[to]) == -1)

と読書

if (msgrcv(q, &msg, sizeof(message), id, 0) == -1)

しかし、このキューが空の場合はどうなりますか?それを確認する方法は?ループ内に次の命令を実行したいものがない場合

4

3 に答える 3

4

を使用しIPC_NOWAITます。ドキュメントから:

(msgflg & IPC_NOWAIT)がゼロ以外の場合、呼び出し元のスレッドは、の戻り値とerrnoをに設定してすぐに戻り-1ます[ENOMSG]

于 2012-12-20T14:42:53.400 に答える
4

msgflgパラメーターにIPC_NOWAITを使用します:http://man7.org/linux/man-pages/man2/msgsnd.2.html

IPC_NOWAIT要求されたタイプのメッセージがキューにない場合、すぐに戻ります。errnoがENOMSGに設定されていると、システムコールが失敗します。

于 2012-12-20T14:43:07.293 に答える
0

キューが空かどうかは、

ipcs

Linuxターミナルのコマンド。

作成したキューが表示されます。

于 2014-08-13T11:31:08.910 に答える