[so] tema 5 linux probleme cu timer
dragos barbulescu
barbulescu_dragos at yahoo.com
Thu Feb 1 15:10:16 EET 2007
Salut
Problema era alta pe care am reusit sa o rezolv! Nu era nicidecum faptul ca nu am pus handlerul la SIGALRM (asta era la mintea cocosului) si nici ca incerc sa modific o tema din alti ani ;). Oricum uite care era problema: In vend cand demapam semnalul de SIGALRM nu eram atent si nu inchideam timerul care imi producea alarma in continuare. Astfel semnalul nu mai venea in handlerul meu si imi dadea acea eroare. Si o a 2-a eroare cea cu rootul erau drepturile pe care le dadeam fisierelor. Nu le dadeam drepturi si cand testul incerca sa le deschida se bloca.
PS: Orice solutie include si solutia de LRU cu timer. Mersi de raspuns desi m-a deranjat concluzia ta pripita. ;)
Dragos
----- Original Message ----
From: Razvan Deaconescu <razvand at cs.pub.ro>
To: Sisteme de Operare <so at cursuri.cs.pub.ro>
Sent: Thursday, February 1, 2007 10:49:24 AM
Subject: Re: [so] tema 5 linux probleme cu timer
dragos barbulescu wrote:
> Salut,
>
> Am nevoie la tema 5 sa folosesc un timer care sa imi dea un semnal de alarma. L-am implementat dar cand l-am uploadat pe site am vazut ca imi da o eroare de Alarm in
> /bin/sh: line 1: 2333 Alarm clock ./test
Hmmm ... un timer. Stii, enuntul de anul trecut cerea folosirea unui
timer pentru implementarea algoritmului LRU (Last Recently Used) de
inlocuire a paginii. Anul acesta nu e nevoie de asa ceva. Inlocuirea
unei pagini poate fi facuta oricum.
Sigur ai citit atent enuntul si nu incerci sa modifici o tema de anul
trecut?
> Si am testat iar tema la mine. Am avut surpriza sa constat ca daca sunt logat pe root imi merge dar cand sunt
> pe alt user imi da aceeasi eroare sau se blocheaza
> Iata cum am folosit timerul:
> //initialise counter
> lru_timer.it_value.tv_sec = 0;
> lru_timer.it_value.tv_usec = TIMER_PERIOD;
> lru_timer.it_interval.tv_sec = 0;
> lru_timer.it_interval.tv_usec = TIMER_PERIOD;
>
> //start timer
> setitimer(ITIMER_REAL, &lru_timer, NULL);
>
ai uitat sa pui handler pentru SIGALRM (SIGALRM este livrat de setitimer
in cazul folosirii ITIMER_REAL)
uite un mic exemplu
------------------------------------------------------------
/*
* itimer.c - itimer test - does it work only as root?
*
* Razvan Deaconescu
*/
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
void alarm_handler (int signo)
{
printf ("alarm received\n");
}
int main (void)
{
struct sigaction sigact;
struct itimerval timer;
sigact.sa_handler = alarm_handler;
sigemptyset (&sigact.sa_mask);
sigact.sa_flags = SA_RESETHAND;
sigaction (SIGALRM, &sigact, NULL);
timer.it_value.tv_sec = 1;
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 1;
timer.it_interval.tv_usec = 0;
/* ITIMER_REAL forces delivery of SIGALRM */
setitimer (ITIMER_REAL, &timer, NULL);
/* wait for signal */
pause ();
/* equivalent */
/*
* alarm (1);
*
* pause ();
*/
return 0;
}
------------------------------------------------------------
rezultatul rularii:
razvan at asgard:~/junk$ gcc -Wall -o itimer itimer.c
razvan at asgard:~/junk$ ./itimer
alarm received
razvan at asgard:~/junk$
Razvan
_______________________________________________
so mailing list
so at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
____________________________________________________________________________________
Expecting? Get great news right away with email Auto-Check.
Try the Yahoo! Mail Beta.
http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html
More information about the so
mailing list