lunes, 8 de marzo de 2010

sys_alarm Perla Diaz

Syntaxis

unsigned int sys_alarm(unsigned int seconds)

asmlinkage unsigned long sys_alarm (unsigned int seconds)

Source

kernel/sched.c

Acción

Establecer una alarma para la entrega de una señal.

#include

Descripción

La función alarm() genera una señal de SIGALRM después de que el número de segundos especificado por el parámetro segundos han transcurrido. La entrega de la señal de SIGALRM se dirige al proceso de llamada.

Los segundos son el número real de segundos que debe transcurrir antes de que se generó el SIGALRM. Debido a los retrasos del procesador, la SIGALRM se puede generar un poco más tarde que este período de tiempo especificado. Si el segundo es cero, se cancela cualquier solicitud de alarma previamente establecidos.

Sólo una alarma puede ser activada a la vez por proceso. Si se establece un tiempo nuevo de la alarma, se cancelará cualquier alarma anterior.

Parámetros

Seconds .- (Input) El número de segundos antes de la generación de la señal.

Valor de Retorno

Si anteriormente se solicita una alarma, esta devuelve un valor distinto de cero que es el número de segundos hasta que la solicitud anterior hubiera generado una señal SIGALRM. De lo contrario, la alarma () devolverá 0.

Puntos a considerar

alarm() y setitimer(2) comparten el mismo temporizador, la llamada para el uso de uno interferirá con el uso del otro.

Errors

La función alarm() siempre resulta satisfactoria, por lo que no retorna un valor.

Routine

asmlinkage unsigned long sys_alarm(unsigned int seconds)

{

struct itimerval it_new, it_old;

unsigned int oldalarm;

it_new.it_interval.tv_sec = it_new.it_interval.tv_usec = 0;

it_new.it_value.tv_sec = seconds;

it_new.it_value.tv_usec = 0;

do_setitimer(ITIMER_REAL, &it_new, &it_old);

oldalarm = it_old.it_value.tv_sec;

/* ehhh.. We can't return 0 if we have an alarm pending.. */

/* And we'd better return too much than too little anyway */

if (it_old.it_value.tv_usec)

oldalarm++;

return oldalarm;

}

Example

#include

#include
/****************** Rutina principal ****************************************/
int main()

{
alarm(3); //el valor lo toma como segundos
alarm(0); //no le hace caso al alarm(3) anterior
write(1,"Ciclando ...\n",14);
alarm(5); //al no hacerle caso a alarm(3) ejecuta el alarm(5), en este momento manda la señar de alarma
while(1)

{

pause(); //Espera hasta que llegue una señal

}
write(1,"Esto nunca se ejecutara\n",25);

//nunca se imprime pues alarm termina la ejecucion del programa.

}

Bibliografia

http://opengroup.org/onlinepubs/007908799/xsh/alarm.html

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/sigalarm.htm

No hay comentarios:

Publicar un comentario