900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Linux系统编程-定时器(闹钟)函数alarm的使用 以及SIGALARM信号的处理

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

时间:2019-09-09 21:34:32

相关推荐

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。