rendered paste body#include <stdio.h>
#include <signal.h>
#define N 5 /* broj razina prekida */
/* deklaracija globalnih varijabli */
int OZNAKA_CEKANJA[N];
int PRIORITET[N];
int TEKUCI_PRIORITET;
int sig[]={SIGUSR1, SIGUSR2, SIGCONT, SIGCHLD, SIGINT};
/* pocetak funkcije za zabranu prekida */
void zabrani_prekidanje(){
int i;
for(i=0; i<5; i++)
sighold(sig[i]);
}
/* pocetak funkcije za dozvolu prekida */
void dozvoli_prekidanje(){
int i;
for(i=0; i<5; i++)
sigrelse(sig[i]);
}
/* pocetak funkcije za obradu prekida */
void obrada_prekida(int i){
switch(i){
case 1:
printf("- P - - - -\n"); sleep(1);
printf("- 1 - - - -\n"); sleep(1);
printf("- 2 - - - -\n"); sleep(1);
printf("- 3 - - - -\n"); sleep(1);
printf("- 4 - - - -\n"); sleep(1);
printf("- 5 - - - -\n");
printf("- K - - - -\n");
break;
case 2:
printf("- - P - - -\n"); sleep(1);
printf("- - 1 - - -\n"); sleep(1);
printf("- - 2 - - -\n"); sleep(1);
printf("- - 3 - - -\n"); sleep(1);
printf("- - 4 - - -\n"); sleep(1);
printf("- - 5 - - -\n");
printf("- - K - - -\n");
break;
case 3:
printf("- - - P - -\n"); sleep(1);
printf("- - - 1 - -\n"); sleep(1);
printf("- - - 2 - -\n"); sleep(1);
printf("- - - 3 - -\n"); sleep(1);
printf("- - - 4 - -\n"); sleep(1);
printf("- - - 5 - -\n");
printf("- - - K - -\n");
break;
case 4:
printf("- - - - P -\n"); sleep(1);
printf("- - - - 1 -\n"); sleep(1);
printf("- - - - 2 -\n"); sleep(1);
printf("- - - - 3 -\n"); sleep(1);
printf("- - - - 4 -\n"); sleep(1);
printf("- - - - 5 -\n");
printf("- - - - K -\n");
}
/* pocetak prekidne rutine */
void prekidna_rutina(int sig){
int n=1;
zabrani_prekidanje();
switch(sig){
case SIGUSR1:
n=1;
printf("- X - - - -\n");
break;
case SIGUSR2:
n=2;
printf("- - X - - -\n");
break;
case SIGCONT:
n=3;
printf("dovrsi\n");
break;
case SIGCHLD:
n=4;
printf("dovrsi\n");
}
OZNAKA_CEKANJA[n]=1;
...
dozvoli_prekidanje()
}
/* pocetak glavnog programa */
int main ( void ){
sigset(SIGUSR1, prekidna_rutina);
sigset(SIGUSR2, prekidna_rutina);
sigset(SIGCONT, prekidna_rutina);
sigset(SIGCHLD, prekidna_rutina);
sigset(SIGINT, prekidna_rutina);
printf("Proces obrade prekida, PID=%d\n", getpid());
sleep(10);
printf("Zavrsio je osnovni program\n");
return 0;
}