キューメッセージが空かどうか知りたい。私は次のようにmsg_ctl()を使用しましたが、機能しません:
struct msqid_ds buf;
int num_messages;
rc = msgctl(msqid, IPC_STAT, &buf);
そして私はこのピーク関数を使用しました:
int peek_message( int qid, long type )
{
int result, length;
if((result = msgrcv( qid, NULL, 0, type, IPC_NOWAIT)) == -1) {
if(errno==E2BIG)
return(1);
}
return(0);
}
どちらの場合も、キューにメッセージを送信する前後で同じ結果が得られます。
メッセージは正常にキューに到達します。送信した内容を読み取ってテストしました。