Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <signal.h>
- #define N 6
- int Oznaka_cekanja[N];
- int Prioritet[N];
- int Tekuci_prioritet;
- int sig[]={SIGUSR1, SIGUSR2, SIGHUP, 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){
- int k, j;
- for (j = 1; j < 6; j++){
- sleep(1);
- for (k = 0; k < i; k++)
- printf("- ");
- printf("%d", j);
- for (k = i; k < N; k++)
- printf("- ");
- printf("-\n");
- }
- }
- void prekidna_rutina(int sig){
- int n = 1;
- int x, j;
- zabrani_prekidanje();
- switch(sig){
- case SIGUSR1:
- n = 1;
- printf("- X - - - -\n");
- break;
- case SIGUSR2:
- n = 2;
- printf("- - X - - -\n");
- break;
- case SIGHUP:
- n = 3;
- printf("- - - X - -\n");
- break;
- case SIGCHLD:
- n = 4;
- printf("- - - - X -\n");
- break;
- case SIGINT:
- n = 5;
- printf("- - - - - X\n");
- break;
- }
- Oznaka_cekanja[n] = 1;
- do {
- x = 0;
- for (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;
- dozvoli_prekidanje();
- obrada_prekida(x);
- zabrani_prekidanje();
- Tekuci_prioritet = Prioritet[x];
- }
- } while (x > 0);
- dozvoli_prekidanje();
- }
- int main(){
- sigset(SIGUSR1, prekidna_rutina);
- sigset(SIGUSR2, prekidna_rutina);
- sigset(SIGHUP, prekidna_rutina);
- sigset(SIGCHLD, prekidna_rutina);
- sigset(SIGINT, prekidna_rutina);
- int k;
- printf("Proces obrade prekida, PID = %d\n", getpid());
- for (k = 1; k < 10; k++){
- printf("%d - - - - -\n", k);
- sleep(1);
- }
- printf("Zavrso osnovni program\n");
- return 0;
- }
Add Comment
Please, Sign In to add comment