All pastes #761508 Raw Edit

Something

public text v1 · immutable
·published 2007-11-04 22:39 UTC
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;
}