alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。
所需头文件 #include<unistd.h>
函数原型 unsigned int alarm(unsigned int seconds)
函数参数 seconds:指定秒数
函数返回值 成功:如果调用此alarm()前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。
出错:-1
代码
#include<unistd.h>
#include<signal.h>void handler(){
printf("Hello\n"); signal(SIGALRM, handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行 handler alarm(5);}
void main()
{ int i; handler(); for(i=1;i<21;i++){
printf("sleep %d ...\n",i); sleep(1); }}
结果:刚开始在main中执行一次,然后每隔5秒执行一次handler()
Hello
sleep 1 ...sleep 2 ...sleep 3 ...sleep 4 ...sleep 5 ...Hellosleep 6 ...sleep 7 ...sleep 8 ...sleep 9 ...sleep 10 ...Hellosleep 11 ...sleep 12 ...sleep 13 ...sleep 14 ...sleep 15 ...Hellosleep 16 ...sleep 17 ...sleep 18 ...sleep 19 ...sleep 20 ...Hello
注意:alarm只设定一个闹钟,时间到达并执行其注册函数之后,闹钟便失效。如果想循环设置闹钟,需在其注册函数中在调用alarm函数。