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

#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函数。这也就类似单片机的定时中断,当定时到了,就跳到中断服务函数里去执行相应的程序。
时间: 2024-10-22 19:59:08

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

《Linux/UNIX系统编程手册(上、下册)》——导读

前言 本书将描述Linux编程接口:由UNIX操作系统的开源实现--Linux所提供的系统调用.库函数以及其他底层接口.运行于Linux之上的每一个程序都会直接或间接地使用这些接口.这些接口允许应用程序去执行诸多任务:文件I/O.创建/删除文件和目录.创建新进程.执行程序.设置定时器.在同一台计算机上发起进程或线程间通信,以及为联网计算机间的进程建立通信等等.有时,人们也将这一系列的底层接口称为系统编程接口. 尽管本书着眼于Linux,但对于标准和可移植性问题也倍加关注.对于Linux所特有的技

《Linux/UNIX系统编程手册(上、下册)》——第1章 历史和标准 1.1UNIX和C语言简史

第1章 历史和标准 Linux是UNIX操作系统家族中的一员.就计算机的发展而言,UNIX历史悠久.本章的第一部分会简要介绍UNIX的历史--以对UNIX系统和C编程语言起源的回顾拉开序幕,接着会述及成就今日Linux系统的两大关键因素:GNU项目和Linux内核的开发. UNIX系统最引人关注的特征之一,是其开发不受控于某一厂商或组织.相反,许多团体--既有商业团体,也有非商业团体--都曾为UNIX的演进做出过贡献.这一渊源使UNIX集多种开创性的特性于一身,但同时也带来了负面影响--随着时间

LINUX C系统编程与PYTHON中的时间模块对比

今天看python时间模块time的时候发现和LINUX系统编程中的时间调用函数基本一样,以前刚好没有好好学习LINUX C编程的时间模块就对比进行了学习. 本文只是给出函数接口和使用方式,详细了解请参考LINUX main page和PYTHON help 本文不涉及asctime和ctime,并且C中涉及多线程编程注意选择可重入性函数 一.时间存在方式 其实不管是C还是PYTHON这里都包含3种时间不同存在的方式 日历时间:Epoch以来的秒及新纪元时间(1970年1月1日 00:00:00

《Linux/UNIX系统编程手册(上、下册)》——1.3 标准化

1.3 标准化 20世纪80年代末,可用的UNIX实现层出不穷,由此也带来了种种弊端.有些UNIX实现基于BSD,而另一些则基于System V,还有一些则是对两大"流派""兼容并蓄".更有甚者,每个厂商都在自己的UNIX实现中添加了额外特性.其结果是将软件及技术人员在不同UNIX实现间转移就变得异常困难.这一形式有力地推动了C语言和UNIX系统的标准化进程,使得应用程序能够在不同操作系统间很方便地进行移植.接下来,将介绍由此而产生的各种标准. 1.3.1 C编程语

《Linux/UNIX系统编程手册(上、下册)》——1.2 Linux简史

1.2 Linux简史 术语Linux通常用来指代完整的类UNIX(UNIX-like)操作系统,Linux内核只是其中的一部分.这么定义多少有些措辞不当,因为一般商业Linux发布版中所含的诸多关键组件实际上发源于另一项目,早在Linux问世前几年就已经启动了. 1.2.1 GNU项目 1984年,Richard Stallman之前一直供职于MIT的一位天赋异禀的程序员,开始着手创建一个"自由的(free)"UNIX实现.Stallman的观点属于道德层面,而对"free

《Linux/UNIX系统编程手册(上、下册)》——1.4 总结

1.4 总结 1969年,贝尔实验室(AT&T的一个部门)的Ken Thompson在Digital PDP-7小型机上首次实现了UNIX系统.对该操作系统而言,无论是理念还是其双关语的称谓都来源于早期的MULTICS系统.时至1973年,UNIX已经被移植到了PDP-11小型机上,并以C语言对其进行了重写,C编程语言是由贝尔实验室的Dennis Ritchie设计并实现的.因为法律禁止AT&T销售UNIX,于是,在象征性地收取了一定的费用之后,AT&T索性将UNIX系统散布进了大

《Linux系统编程(第2版)》——第1章 入门和基本概念 1.1 系统编程

第1章 入门和基本概念 摆在你面前的是一本关于系统编程的书,你将在本书中学习到编写系统软件的相关技术和技巧.系统软件运行在系统的底层,与内核和系统核心库进行交互.常见的系统软件包括Shell.文本编辑器.编译器.调试器.核心工具(GNU Core Utilities)以及系统守护进程.此外,网络服务.Web服务和数据库也属于系统软件的范畴.这些程序都是基于内核和C库实现的,可以称为"纯"系统软件.相对地,其他软件(如高级GUI应用),很少和底层直接交互.有些程序员一直在编写系统软件,而

【Linux系统编程】 Linux系统调用概述

系统调用概述 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组"特殊"接口.用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件.关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等. 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口--它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间. 系统服务之所以需要通过系统调

《Linux系统编程(第2版)》——导读

前言 这本书是关于Linux上的系统编程."系统编程"是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话.换句话说,本书的主题是Linux系统调用和底层函数说明,如C库定义的函数. 虽然已经有很多书探讨UNIX上的系统编程,却很少有专注于探讨Linux方面的书籍,而探讨最新版本的Linux以及Linux特有的高级接口的书籍更是凤毛麟角.此外,本书还有一个优势:我为Linux贡献了很多代码,包括内核及其上面的系统软件.实际上,本书中提到的一些系统调用和系统软件就是我实现的.因