rendered paste body#include <stdio.h>
#include <signal.h>
#define N 6
int OZNAKA_CEKANJA[N];
int PRIORITET[N];
int TEKUCI_PRIORITET;
int sig[]={SIGUSR1, SIGUSR2, SIGILL, SIGCONT, SIGCHLD, SIGINT};
void zabrani_prekidanje(){
int i;
for(i=0;i<5;i++)
sighold(sig[i]);
}
void dozvoli_prekidanje(){
int i;
for(i=0;i<5;i++)
sigrelse(sig[i]);
}
void obrada_prekida(int i){
switch(i){
case 1:
printf("-P----\n");
printf("-1----\n"); sleep(1);
printf("-2----\n"); sleep(1);
printf("-3----\n"); sleep(1);
printf("-4----\n"); sleep(1);
printf("-5----\n"); sleep(1);
printf("-K----\n");
break;
case 2:
printf("--P---\n");
printf("--1---\n"); sleep(1);
printf("--2---\n"); sleep(1);
printf("--3---\n"); sleep(1);
printf("--4---\n"); sleep(1);
printf("--5---\n"); sleep(1);
printf("--K---\n");
break;
case 3:
printf("---P--\n");
printf("---1--\n"); sleep(1);
printf("---2--\n"); sleep(1);
printf("---3--\n"); sleep(1);
printf("---4--\n"); sleep(1);
printf("---5--\n"); sleep(1);
printf("---K--\n");
break;
case 4:
printf("----P-\n");
printf("----1-\n"); sleep(1);
printf("----2-\n"); sleep(1);
printf("----3-\n"); sleep(1);
printf("----4-\n"); sleep(1);
printf("----5-\n"); sleep(1);
printf("----K-\n");
break;
case 5:
printf("-----P\n");
printf("-----1\n");sleep(1);
printf("-----2\n");sleep(1);
printf("-----3\n");sleep(1);
printf("-----4\n");sleep(1);
printf("-----5\n");sleep(1);
printf("-----K\n");
break;
case 6:
printf("Killed\n");
break;
}
}
void prekidna_rutina(int sig){
int n=1,j,m;
zabrani_prekidanje();
switch (sig){
case SIGUSR1:
n=1;
printf("-X----\n");
break;
case SIGUSR2:
n=2;
printf("--X---\n");
break;
case SIGILL:
n=3;
printf("---X--\n");
break;
case SIGCONT:
n=4;
printf("----X-\n");
break;
case SIGCHLD:
n=5;
printf("-----X\n");
break;
case SIGINT:
n=6;
printf("^C-----X\n");
break;
}
OZNAKA_CEKANJA[n]=1;
while(1){
for(j=0;j<5;j++)
if(OZNAKA_CEKANJA[j]!=0&&j>TEKUCI_PRIORITET) m=j;
OZNAKA_CEKANJA[j]=0;
PRIORITET[j]=TEKUCI_PRIORITET;
TEKUCI_PRIORITET=j;
dozvoli_prekidanje();
obrada_prekida(j);
zabrani_prekidanje();
TEKUCI_PRIORITET=PRIORITET[j];
}
dozvoli_prekidanje();
}
int main(){
sigset(SIGUSR1,prekidna_rutina);
sigset(SIGUSR2,prekidna_rutina);
sigset(SIGILL,prekidna_rutina);
sigset(SIGCONT,prekidna_rutina);
sigset(SIGCHLD,prekidna_rutina);
sigset(SIGINT,prekidna_rutina);
printf("Proces obrade prekida,PID= %d\n",getpid());
printf("G 12345\n");
printf("-------\n");
printf("1 -----\n");
printf("2 -----\n");
printf("3 -----\n");
printf("4 -----\n");
sleep(10);
printf("Zavrsio osnovni program\n");
return(0);
}