alarm简介:
alarm,也称闹钟或定时器。Linux提供了系统调用alarm函数,来设置一个定时器。一旦时间到了,可以按照预先指定的处理函数来执行相应的动作。
alarm函数的声明:
#include<unistd.h>
unsigned int alarm(unsigned int seconds);
说明:
alarm()用来设置定时器。时间到了,就会向当前进程发送SIGALRM信号。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。如果未设置信号SIGALARM的处理函数,那么alarm()默认处理终止进程。
返回值:
返回值是一个无符号整型类型。返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。
注意:
1)一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新设置的闹钟时间所代替;
2)经过指定的秒数后,信号由内核产生。
alarm函数使用举例:
功能:实现一个简单的闹钟处理函数handler,在指定的闹钟时间到了后,执行闹钟处理函数handler。
#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <signal.h>/*闹钟信号处理函数*/void sig_handler() {printf( "hello world! \n " );}/*主函数*/int main() {int i;signal( SIGALRM, sig_handler );alarm( 5 );for ( i = 0; i < 8; i++ ){printf( " sleep % d ... \n ", i );sleep( 1 );}return 0;}
编译和运行:
% gcc alarm_test.c -o alarm
% ./alarm
sleep 0 ...
sleep 1 ...
sleep 2 ...
sleep 3 ...
sleep 4 ...
hello world!
sleep 5 ...
sleep 6 ...
sleep 7 ...
说明:
1)SIGALRM是闹钟信号;sig_handler是闹钟信号SIGALRM的处理函数;
2)alarm(5),标志5s后将发送SIGALARM信号;程序就会去执行handler函数,输出
hello world!
3)sleep函数也是一个系统调用,sleep(unsigned int seconds)会令目前的进程暂停,直到达到参数seconds 所指定的时间。sleep函数的声明如下:
#include<unistd.h>
unsigned int sleep(unsigned int seconds);
3)当handler函数执行完成后,再回到原来执行的地方,继续执行,输出:
sleep 5 ...
sleep 6 ...
sleep 7 ...