У меня есть очередь сообщений, и получатель программы должен распечатать очередь в порядке возрастания или убывания (выбор пользователя) из-за значения типа.
Я написал программу, которая получила сообщения, и программу, которая отправляетСообщения. Пользователь может вводить сообщения, не используя Ctrl + D.
prog1
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#define SIZE 100
struct msgbuf
{
long type;
char mtext[SIZE];
};
void send_message(int mqid)
{
struct msgbuf buffer;
srand(time(0));
//buffer.type = 1;
memset(buffer.mtext,0,sizeof(buffer.mtext));
while(fgets(buffer.mtext, sizeof(buffer.mtext), stdin) != NULL)
{
buffer.type = rand()%5+1;
//memset(buffer.mtext,0,sizeof(buffer.mtext));
printf("msgtyp: %d\n",buffer.type);
if(msgsnd(mqid, &buffer, sizeof(buffer.mtext),0)<0)
perror("msgsnd");
}
strcpy(buffer.mtext, "end");
if(msgsnd(mqid, &buffer, sizeof(buffer.mtext),0)<0)
perror("msgsnd");
}
int main()
{
int key = ftok("comm", 8);
if(key < 0)
perror("ftok");
int id = msgget(key, 0600);
if(id < 0)
perror("msgget");
send_message(id);
return 0;
}
prog2
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/wait.h>
#define SIZE 100
struct msgbuf
{
long type;
char mtext[SIZE];
};
void receive_mssg(int mqid)
{
struct msgbuf buffer;
for(;;){
if(msgrcv(mqid, &buffer, sizeof(buffer.mtext),0,0)<0)
perror("msgrcv");
else
printf("Received message %s\n", buffer.mtext);
int a = strcmp(buffer.mtext, "end");
if(a == 0)
break;
}
}
int main(void)
{
int key = ftok("comm", 8);
if(key < 0)
perror("ftok");
int id = msgget(key, 0600|IPC_CREAT|IPC_EXCL);
if(id < 0)
perror("msgget");
receive_mssg(id);
if(msgctl(id, IPC_RMID, 0)<0)
perror("msgctl");
return 0;
}
Обе программы работают нормально, но я пытаюсь печатать в порядке возрастания или убывания, и понятия не имеюкак это сделать.