任何人都可以告诉我如何在" 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;
}
答案 0 :(得分:0)
MSG_EXCEPT的问题在于它依赖于记录不完善的功能,因为它需要定义_GNU_SOURCE。
如果使用gcc -D_GNU_SOURCE <and all your usual compiler switches> Receiver.c
进行编译,您会发现问题将得到解决。
有关此内容的更详细说明,请参阅MSG_EXCEPT not defined。