[so] tema 5 linux probleme cu timer

Razvan Deaconescu razvand at cs.pub.ro
Thu Feb 1 10:49:24 EET 2007


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


More information about the so mailing list