#include #include #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; }