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.
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.
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.
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