печать очереди сообщений в порядке убывания из-за значения типа - PullRequest
0 голосов
/ 26 октября 2019

У меня есть очередь сообщений, и получатель программы должен распечатать очередь в порядке возрастания или убывания (выбор пользователя) из-за значения типа.

Я написал программу, которая получила сообщения, и программу, которая отправляетСообщения. Пользователь может вводить сообщения, не используя 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;
}

Обе программы работают нормально, но я пытаюсь печатать в порядке возрастания или убывания, и понятия не имеюкак это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...