当前位置: 移动技术网 > IT编程>开发语言>C/C++ > Linux C系统编程:信号与定时器的使用

Linux C系统编程:信号与定时器的使用

2018年03月03日  | 移动技术网IT编程  | 我要评论

论情古诗,vv小说,soundhound是什么

#include 
#include 


void do_alarm(int num);

int main(void)
{
        //注册一个定时器


        if(signal(SIGALRM , do_alarm) == SIG_ERR)
        {
                perror("register alarm fail");
                return -1;
        }

        //alarm
        ////3秒之后发送SIGALRM信号,但是一次性的   SIGALRM信号:定时器的信号
        alarm(3);

        while(1)
        {
                printf("this is in main... \n");
                sleep(3);
        }

        return 0 ;
}

void do_alarm(int num)
{
        printf("this is in alarm ... &*&&\n");
        //会影响sleep
        alarm(1);
}

执行结果:

this is in main...
this is in alarm ... &*&&
this is in main...
this is in alarm ... &*&&
this is in main...
this is in alarm ... &*&&
this is in main...

......
在 这个头文件中。


signal(参数1,参数2);

参数1:我们要进行处理的信号。系统的信号我们可以再终端键入 kill -l查看(共64个)。其实这些信号时系统定义的宏。

参数2:我们处理的方式(是系统默认还是忽略还是捕获),这里我写了一个处理函数,也就是说这里不是系统默认的。

unsigned int alarm(unsigned int seconds);

参数1:表示指定的秒数。

要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。需要注意的是,经过指定的秒数后,信号由内核产生,由于进程调度的延迟,所以进程得到控制从而能够处理该信号还需要一些时间。如果有以前为进程登记的尚未超时的闹钟时钟,而且本次调用的seconds值是0,则取消以前的闹钟时钟,其余留值仍作为alarm函数的返回值。

以上程序是利用定时器产生的一个信号SIGALRM信号,在收到该信号同时会调用do_alarm函数。这也就类似单片机的定时中断,当定时到了,就跳到中断服务函数里去执行相应的程序。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网