Linux: проверьте, нет ли очереди сообщений

Я хочу знать, пустое сообщение в очереди или нет. Я использовал msg_ctl (), так как он не работает:

struct msqid_ds buf; int num_messages; rc = msgctl(msqid, IPC_STAT, &buf); 

и я использовал эту функцию peek:

 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); } 

в обоих случаях я получаю тот же результат до и после отправки сообщения в очередь.

сообщение попадает в очередь успешно, я протестировал это, прочитав то, что я отправил.

Я написал пример кода, который, похоже, работает правильно:

 #include  #include  #include  #include  #include  struct msgbuf { long mtype; /* message type, must be > 0 */ char mtext[1]; /* message data */ }; int main(void) { int msqid; //msqid = msgget(IPC_PRIVATE, (IPC_CREAT | IPC_EXCL | 0600)); msqid = msgget((key_t)1235, 0600 | IPC_CREAT); printf("Using message queue %d\n", msqid); struct msqid_ds buf; int rc = msgctl(msqid, IPC_STAT, &buf); uint msg = (uint)(buf.msg_qnum); printf("# messages before post: %u\n", msg); printf("Posting message to queue...\n"); struct msgbuf qmsg; qmsg.mtype = 100; qmsg.mtext[0] = 'T'; int res = msgsnd(msqid, &qmsg, 1, MSG_NOERROR); rc = msgctl(msqid, IPC_STAT, &buf); msg = (uint)(buf.msg_qnum); printf("# messages after post: %u\n", msg); return 0; } 

Может быть, это будет полезно для вас? Количество сообщений в очереди, похоже, увеличивается при использовании этого кода.