Sunteți pe pagina 1din 2

NUME: *********

GRUPA: 223
SEMIGRUPA: ***-*
USERNAME: ******
_______________________________________________________________________________
PROBLEMA:
16. Sa se scrie un program care simuleaza un cronometru.
La pornirea programului se initializeaza timpul cu valoarea 0.
La primirea semnalului SIGUSR1 va afisa timpul intermediar. La primirea
semnalului SIGUSR2 se va opri.
_______________________________________________________________________________
ASPECTE TERORETICE:
Pentru efectuarea simularii unui cronometru am folosit apelul sistem signal ,
care primind unul din semnalele
SIGALARM , SIGUSR1 , SIGUSR2 duce la rezolvarea problemei.
_______________________________________________________________________________
PREZENTAREA SOLUTIEI:
Pentru inceput am implementat o functie(rutina_alarm) care doar incrementeaza
un contor , aceasta functie fiind apelata la un
interval de timp de o secunda (datorita apelului sistem alarm(1)).
Functia rutina_sigusr1 este apelata de catre sistem , atunci cand acesta primest
e semnalul SIGUSR1 prin apelul sistem
signal(SIGUSR1,rutina_sigusr1)
- acesta apeland functia rutina_sigusr1 ca fiind o rutina de tratare a semnalulu
i SIGUSR1.
Functia rutina_sigusr2 opreste cronometrul , astfel seteaza valoarea secundelor
la 0.
- aceasta rutina de tratare (functie) se apeleaza de sistem , cand acesta primes
te semnalul SIGUSR2 prin apelul sistem
signal(SIGUSR2,rutina_sigusr2);
Cu ajutorul apelului alarm(1) se porneste un timer care dupa o secunda , da cont
rolul semnalului SIGALARM , acesta avand ca
rutina de tratare , functia de la inceput : rutina_alarm
Pentru ca , cronometrul sa functioneze continuu se foloseste o bucla (while(1))
si apelul sistem pause() care asteapta
un semnal pentru o secunda , astfel :
- sistemul trimite semnalul SIGALARM si timpul incrementeaza
_______________________________________________________________________________
INSTRUCTIUNI DE RULARE:
Compilarea programului :
-bash-2.05b$ make semnale (fara extensia .c , e vazuta implicit de utilizarul ma
ke)
sau
-bash-2.05b$ gcc semnale.c -o semnale
-bash-2.05b$ ./semnale &
[1] 28068
-bash-2.05b$ kill -USR1 28068
-bash-2.05b$ S-au scurs 5 secunde
kill -USR1 28068
-bash-2.05b$ S-au scurs 9 secunde
kill -USR1 28068
-bash-2.05b$ S-au scurs 11 secunde
-bash-2.05b$ kill -USR2 28068

-bash-2.05b$

S-ar putea să vă placă și