linux 应用程序 定时器,Linux应用程序中的定时器

下面看一下这个信号结构体。

struct sigaction {

void (*sa_handler)(int);

sigset_t sa_mask;

int sa_flags;

void (*sa_sigaction)(int, siginfo_t *, void *);

};

在使用的时候,sa_handler和sa_sigaction只是用一个。

sa_mask是和sa_handler一起的。

sa_mask表示了一个信号集合,在调用sigaction之前要先用sigemptyset把sa_mask加入到进程的信号屏蔽字当中。

sigemptyset函数初始化一个sigset_t *类型的信号集合,清除里面的所有信号。

使用函数sigaction(SIGALRM, &tact, NULL)就是把SIGALRM的信号的触发动作变成tact结构体中的sa_handler或者sa_sigaction所指向的函数了。

例子如下,每隔2秒钟打印一行字。

一个函数用来设置信号相关的函数绑定,一个函数用来初始化定时器并且启动它。

然后程序需要运行很久,放到死循环里面去,才能看出来效果,一般的应用程序,都不会自动退出的,往往是永远不退出,或者是等待用户关闭它。

#include

#include

#include

#include

#include

staticcharmsg[] ="time is running out.\n";

staticintlen;

voidprompt_info(intsigno)

{

write(STDERR_FILENO, msg, len);

}

voidinit_sigaction(void)

{

structsigaction tact;

tact.sa_handler = prompt_info;

tact.sa_flags = 0;

sigemptyset(&tact.sa_mask);

sigaction(SIGALRM, &tact, NULL);

}

voidinit_time()

{

structitimerval value;

value.it_value.tv_sec = 2;

value.it_value.tv_usec = 0;

value.it_interval = value.it_value;

setitimer(ITIMER_REAL, &value, NULL);

}

intmain()

{

len = strlen(msg);

init_sigaction();

init_time();

while(1);

exit(0);

}0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值