在消息队列中查询MSG_EXCEPT标志

时间:2014-05-18 12:20:31

标签: message-queue msgrcv

任何人都可以告诉我如何在" msgrcv"中使用MSG_EXCEPT标志。使用示例在消息队列上运行?

我正在尝试这样做,但它会给我一个错误:MSG_EXCEPT未声明 我输入了" 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 个答案:

答案 0 :(得分:0)

MSG_EXCEPT的问题在于它依赖于记录不完善的功能,因为它需要定义_GNU_SOURCE。

如果使用gcc -D_GNU_SOURCE <and all your usual compiler switches> Receiver.c进行编译,您会发现问题将得到解决。

有关此内容的更详细说明,请参阅MSG_EXCEPT not defined