Linux C系统编程:信号与定时器的使用
2016-07-11 16:05
387 查看
#include <stdio.h> #include <signal.h> 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.h> 这个头文件中。 signal(参数1,参数2); 参数1:我们要进行处理的信号。系统的信号我们可以再终端键入 kill -l查看(共64个)。其实这些信号时系统定义的宏。 参数2:我们处理的方式(是系统默认还是忽略还是捕获),这里我写了一个处理函数,也就是说这里不是系统默认的。 unsigned int alarm(unsigned int seconds); 参数1:表示指定的秒数。 要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。需要注意的是,经过指定的秒数后,信号由内核产生,由于进程调度的延迟,所以进程得到控制从而能够处理该信号还需要一些时间。如果有以前为进程登记的尚未超时的闹钟时钟,而且本次调用的seconds值是0,则取消以前的闹钟时钟,其余留值仍作为alarm函数的返回值。 以上程序是利用定时器产生的一个信号SIGALRM信号,在收到该信号同时会调用do_alarm函数。这也就类似单片机的定时中断,当定时到了,就跳到中断服务函数里去执行相应的程序。
相关文章推荐
- Linux C系统编程:信号与定时器的使用
- Linux下回射服务器
- linux下core文件调试方法
- centos7之lamp环境搭建
- linux课堂笔记----磁盘管理
- CentOS7安装iptables防火墙
- root账户不允许远程登陆
- vmware linux nat模式设置静态ip
- asp.net linux 环境部署, jexus
- Linux下Thrift的安装
- centos下安装JDK8的方法
- 在Linux上限制远程登陆的IP
- ASP.net Core 部署说明(CentOS)
- linux中配置java环境
- 【工具】Linux errno对照
- Linux中用st_mode判断文件类型
- Linux共享内存的内核实现
- Linux中断(interrupt)子系统之五:软件中断(softIRQ)【转】
- 关于搭建Linux项目运行环境
- linux 下ngnix启动,停止命令总结