All pastes #801135 Raw Edit

Untitled

public text v1 · immutable
#801135 ·published 2007-11-29 00:44 UTC
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;
	default:
		printf("Doslo je do pogreske\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");*/	/* ne ispisuje se */
                break;
	default:
		printf("Doslo je do pogreske\n");
		break;
        }
        OZNAKA_CEKANJA[n]=1;
        while(1){
                for(j=1;j<N;j++)
                   if(OZNAKA_CEKANJA[j]!=0 && j>m && j>TEKUCI_PRIORITET) m=j;	/* dodano j>m */
        	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(50);		/* povecano sa 10 ma 50 */
        printf("Zavrsio osnovni program\n");
        return(0);
}