include stdio include unistd include time include signal define int OZ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <signal.h>
#define N 8
int OZNAKA_CEKANJA[N];
int PRIORITET[N];
int TEKUCI_PRIORITET;
void obrada_prekida(int j){
printf("Zapoceo obradu prekida prioriteta %d\n", j);
for(int i = 0; i < 20; i++){
printf("Obrada prekida %d: %d/20\n", j, i + 1);
sleep(1);
}
printf("Završio obradu prekida prioriteta %d\n", j);
}
void prekidna_rutina(int sig){
time_t t;
time(&t);
printf("\nPrekidna rutina pozvana: %s\n", ctime(&t));
printf("Razina prekida: ");
int i;
scanf("%d", &i);
OZNAKA_CEKANJA[i] = 1;
int x;
do{
x = 0;
for(int j = TEKUCI_PRIORITET + 1; j < N; j++){
if(OZNAKA_CEKANJA[j] != 0){
x = j;
}
}
if(x > 0){
OZNAKA_CEKANJA[x] = 0;
PRIORITET[x] = TEKUCI_PRIORITET;
TEKUCI_PRIORITET = x;
sigrelse(SIGINT);
obrada_prekida(x);
sighold(SIGINT);
TEKUCI_PRIORITET = PRIORITET[x];
}
}while(x > 0);
}
int main(){
sigset(SIGINT, prekidna_rutina);
puts("Zapoceo osnovni program");
for(int i = 0; i < 20; i++){
printf("Glavni program %d/20\n", i + 1);
sleep(1);
}
puts("Završio osnovni program");
}