Untitled
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