从邮件队列接收号码的问题

时间:2019-11-02 12:42:12

标签: 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<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;
 }
//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;
 }

结果:

Even number : 2
Odd number : 1
Sum :3
Even number : 0
Odd number : 0
Sum :0
Even number : 0
Odd number : 0
Sum :0
Even number : 0
Odd number : 0
Sum :0
Even number : 0
Odd number : 0
Sum :0
Even number : 0
Odd number : 0
Sum :0
Even number : 0
Odd number : 0
Sum :0
Even number : 0
Odd number : 0
Sum :0

0 个答案:

没有答案