Untitled

 avatar
unknown
plain_text
a year ago
2.2 kB
10
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <sys/msg.h>
#include <sys/ipc.h>

#define MAX 256
#define K 10101
#define P 0666
#define C IPC_CREAT

struct buffer {
    long tip;
    char ime[MAX];
    char prezime[MAX];
    int indeks;
};

int main() {
    int msgid = msgget(K, P | C);
    struct buffer buff;

    if (fork() != 0) {
        while(1) {
            printf("Unesite broj indeksa, ime i prezime respektivno. Za polje indeks stavite 0 ako nema vise studenta.\n");
            scanf("%d", &buff.indeks);

            if (buff.indeks == 0) {
                buff.tip = 1;
                msgsnd(msgid, &buff, sizeof(buff)-sizeof(long), 0);
                printf("Primljena 0, izlazim...\n");
                break;
            }

            scanf("%s", buff.ime);
            scanf("%s", buff.prezime);

            printf("Primeljen student. Saljem dalje...\n");
            buff.tip = 1;

            msgsnd(msgid, &buff, sizeof(buff)-sizeof(long), 0);
        }

        wait(NULL);

        msgctl(msgid, IPC_RMID, NULL);
    } else {
        struct buffer studenti[MAX];
        int i = 0;
        while(1) {
            
            msgrcv(msgid, &buff, sizeof(buff)-sizeof(long), 1, 0);

            if(buff.indeks == 0) {
                printf("Primljena 0 u detetu procesu, izlazim...\n");
                break;
            }

            printf("\n-----------------Primljen student: %d %s %s\n", buff.indeks, buff.ime, buff.prezime);
            
            studenti[i++] = buff;
        } 
        
        for (int j = 0; j < i-1; j++) {
            for (int k = j + 1; k < i; k++) {
                if (studenti[j].indeks > studenti[k].indeks) {
                    struct buffer temp;
                    temp = studenti[k];
                    studenti[k] = studenti[j];
                    studenti[j] = temp;
                }
            }
        }
        
        printf("\nLista primljenih studenata po broju indeksa:\n");
        for (int j = 0; j < i; j++) {
            printf("%d. %d %s %s\n", j+1, studenti[j].indeks, studenti[j].ime, studenti[j].prezime);
        }

        return 0;
    }
}

Editor is loading...
Leave a Comment