C 从消息队列接收号码时出现问题

C 从消息队列接收号码时出现问题,c,linux,ubuntu,message-queue,C,Linux,Ubuntu,Message Queue,主要任务:编写三个程序。让第一个程序将偶数写入队列,第二个程序将奇数写入队列,让第三个程序从队列中读取连续的数对并将它们相加 问题是,在前两个程序发送数字后,第三个程序只接收第一个数字,其余程序不接收,结果为零 //first prog sender even number #include<stdio.h> #include<string.h> #include<sys/ipc.h> #include<sys/msg.h> #include&l

主要任务:编写三个程序。让第一个程序将偶数写入队列,第二个程序将奇数写入队列,让第三个程序从队列中读取连续的数对并将它们相加

问题是,在前两个程序发送数字后,第三个程序只接收第一个数字,其余程序不接收,结果为零

//first prog sender even number

#include<stdio.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>

#define TEXT_LENGTH 50

 struct msgbuf {
 long type;
 int mtext[TEXT_LENGTH];
 };

 void send_message(int mqid)
 {
 struct msgbuf buffer;
  memset(buffer.mtext,0,sizeof(buffer.mtext));

int message =2;
for(int i =0;i<8;i++){
 buffer.type = 1;
 buffer.mtext[i]=message;

 if(msgsnd(mqid,&buffer,sizeof(buffer.mtext[i]),0)<0)
 perror("msgsnd");
 printf("Program send even number : %d\n",message);
 message+=2;
}
 }

 int main(void)
 {
 int key = ftok("io",8);
 if(key<0)
 perror("ftok");

 int id = msgget(key,0600);
 if(id<0)
 perror("msgget");

 send_message(id);

 return 0;
 }

如果真正发送的是一个
int
值,为什么要为
mtext
设置一个
50
整数数组?实际上,我认为这个数组是问题的根源之一。如果将程序修改为仅对整数值使用
mtext[0]
,那么它是否有效?问题是按照我建议的方式解决的,还是用其他方式解决的?如果你以其他方式解决了这个问题,并且你认为这对其他人来说是有用的(记住,这个网站是为了公共利益,而不仅仅是你自己的利益),那么请写一个答案。
//second program sender odd number
#include<stdio.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>

#define TEXT_LENGTH 50

 struct msgbuf {
 long type;
 int mtext[TEXT_LENGTH];
 };

 void send_message(int mqid)
 {
 struct msgbuf buffer2;
 memset(buffer2.mtext,0,sizeof(buffer2.mtext));
int message=-1;
 buffer2.type = 2;
 for(int i =0;i<8;i++){
         message+=2;
 buffer2.mtext[i]=message;

 if(msgsnd(mqid,&buffer2,sizeof(buffer2.mtext[2]),0)<0)
 perror("msgsnd");
 printf("Program send odd number : %d\n",message);

 }
 }

 int main(void)
 {
 int key = ftok("io",8);
 if(key<0)
 perror("ftok");

 int id = msgget(key,0600);
 if(id<0)
 perror("msgget");

 send_message(id);

 return 0;
 }
//third program recipient

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

 struct msgbuf {
 long type;
 int mtext[50];
 };

 void receive_message(int mqid)
 {
 struct msgbuf buffer;
 struct msgbuf buffer2;

for(int i =0;i<8;i++){
 if(msgrcv(mqid,&buffer,sizeof(buffer.mtext[i]),1,0)<0)
 perror("msgrcv");
 else
 printf("\nEven number : %d\n",buffer.mtext[i]);

if(msgrcv(mqid,&buffer2,sizeof(buffer2.mtext[i]),2,0)<0)
 perror("msgrcv");
 else
 printf("Odd number : %d\n",buffer2.mtext[i]);
printf("Sum :%d",buffer.mtext[i] + buffer2.mtext[i]);
 }
 }
 int main(void)
 {
 int key = ftok("io",8);
 if(key<0)
 perror("ftok");
 int id = msgget(key,0600|IPC_CREAT|IPC_EXCL);
 if(id<0)
 perror("msgget");
 receive_message(id);
 if(msgctl(id,IPC_RMID,0)<0)
 perror("msgctl");
 return 0;
 }