Linux系统编程-定时器(闹钟)函数alarm的使用,以及SIGALARM信号的处理

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


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值