Запрос в MSG_EXCEPT флаг в очереди сообщений

Кто-нибудь может сказать мне, как использовать флаг MSG_EXCEPT в функции "msgrcv" в очереди сообщений с примером?

Я пытаюсь сделать это, но он выдаст мне ошибку вроде: MSG_EXCEPT undeclared Я ввел все файлы заголовков для функции "msgrcv".

пожалуйста, дайте мне решение с примером кода.

Я загружаю мой пример кода со стороны получателя.

Receiver.c

#include <stdio.h>
#include <sys/msg.h>
#include <error.h>
#include <strings.h>
#include <mqueue.h>
#include <sys/ipc.h>
#include <sys/types.h>

int main() 
{
  int msqid;

  struct message 
  {
    long type;
    char text[20];
  } msg;

  struct msqid_ds buf;

  int msgtype = 3;
  int num_messages;
  int count;
  int key = 1234;

  msqid = msgget(key,0644);

  count = msgctl(msqid,IPC_STAT,&buf);
  num_messages = buf.msg_qnum;

  printf("Number of messages = %d\n",num_messages);
  if (msgrcv(msqid, (void *) &msg, sizeof(msg.text),4, MSG_EXCEPT | MSG_NOERROR | IPC_NOWAIT)==-1)
  {  
     perror("msgrcv");           
  }

  if(num_messages==0)
  {
        printf("Queue is empty\n");
  }
  else
  {     
    printf("%s \n", msg.text);
  }

  return 0;
}

1 ответ

Проблема с MSG_EXCEPT заключается в том, что он опирается на плохо документированную функцию, поскольку ему необходимо определить _GNU_SOURCE.

Если вы компилируете с gcc -D_GNU_SOURCE <and all your usual compiler switches> Receiver.c Вы должны найти, что проблема будет решена.

Для более подробного объяснения этого см. MSG_EXCEPT не определено.

Другие вопросы по тегам