功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能。

头文件:sys/time.h

函数原型:

  1. int setitimer(int which,
  2. const struct itimerval *new_value,
  3. struct itimerval *old_value);

参数含义:

1、which参数用来设置定时器类型,可选的值为

  (1)ITIMER_REAL : 设置定时器以系统真实所花费的时间来计时,运行指定时间后发送SIGALRM信号。

  (2)ITIMER_VIRTUAL : 设置进程在用户空间中执行时,时间计数减少。运行指定时间后发送SIGVTALRM信号

  (3)ITIMER_PROF : 设置进程在内核空间中执行时,时间计数减少。运行指定时间后发送SIGPROF信号。

2、new_value参数 : 用来对定时器的定时时间进行设置

3、old_value参数 :很少使用,常常设置为NULL。它是用来存储上一次setitimer调用时设置的new_value值。

itimerval结构体:

  1. struct timeval
  2. {
  3. time_t tv_sec; /* 秒*/
  4. suseconds_t tv_usec; /* 微秒(10^(-6))*/
  5. };
  6.  
  7. struct itimerval
  8. {
  9. struct timeval it_interval; /* 再次产生定时器信号的时间 */
  10. struct timeval it_value; /* 首次产生定时器信号的时间 */
  11. };

settimer的机制:先对it_value以which参数设置的方式倒计时,当it_value为零时就会发送信号。然后it_value会被重置为it_interval的值。最后重新开始新一轮的定时,按照这种方式一直循环下去。

注意:

1、it_value的值为0,将不会发送信号。因此要想能发送信号,it_value的值得大于0

2、it_interval的值为0,定时器只会发送一次信号,即只能延时,不能定时。

demo程序:

  1. #include <stdio.h>
  2. #include <sys/time.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <signal.h>
  7.  
  8. void call_back(int sig)
  9. {
  10. static int count = ;
  11. printf("call_back : %d\n", count++);
  12. }
  13.  
  14. int main(void)
  15. {
  16. signal(SIGALRM, call_back);
  17. struct itimerval new_value;
  18. memset(&new_value, , sizeof(new_value));
  19.  
  20. new_value.it_interval.tv_sec = ; //设置再次定时时间为1S
  21. new_value.it_interval.tv_usec = ;
  22. new_value.it_value.tv_sec = ; //设置首次定时时间为2S
  23. new_value.it_value.tv_usec = ;
  24.  
  25. int ret = setitimer(ITIMER_REAL, &new_value, NULL);
  26. if ( != ret)
  27. {
  28. perror("setitimer");
  29. exit(-);
  30. }
  31. getchar();
  32.  
  33. return ;
  34. }

运行结果:

Linux系统编程-setitimer函数的更多相关文章

  1. Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O

    Linux系统的I/O也就是一般所说的低级I/O--操作系统提供的基本IO服务,与os绑定,特定于Linux平台.而标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头 ...

  2. linux系统编程(一)概述

    glibc库封装了linux系统调用,并提供c语言接口 所以学习linux系统编程,主要参考glibc库系统调用相关api 一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 ...

  3. linux系统编程之信号(七)

    今天继续学习信号,主要是学习关于时间和定时器相关的函数的使用,关于这个实际上有很多内容,这里先简要进行说明,等之后再慢慢进行相关深入,也主要是为接下来要做的一个综合linux系统编程的例子做准备,好了 ...

  4. Linux系统编程温故知新系列 --- 01

    1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...

  5. linux系统编程之错误处理

    在linux系统编程中,当系统调用出现错误时,有一个整型变量会被设置,这个整型变量就是errno,这个变量的定义在/usr/include/errno.h文件中 #ifndef _ERRNO_H /* ...

  6. LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题

    19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...

  7. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  8. Linux 系统编程

    简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...

  9. Linux C 程序 文件操作(Linux系统编程)(14)

    文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...

随机推荐

  1. bk.

    http://ol.tgbus.com/zt2013/gzsnew/ 巴士盘点 十大游戏工作室 http://bbs.3dmgame.com/forum.php?mod=viewthread& ...

  2. 使用Script Component源处理不规则平面文件

    微软 BI 系列随笔 - SSIS 2012 高级应用 - Script Component处理不规则平面文件 场景介绍 在使用SSIS从平面文件导入源数据时,最常遇到的是以下两种情况: 导入规则的平 ...

  3. Tomcat长出现的内存溢出问题

    以下内容转载自博客:http://www.cnblogs.com/apaqi/archive/2012/07/09/2582480.html 在eclipse.ini配置文件中加上以下两行 -XX:P ...

  4. 字符串--java中判断字符串是否为数字的方法的几种方法?

    ava中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...

  5. ISurfaceOp 接口生成等高线

    (1)ISurfaceOp.Contour 根据DEM生成等高线图层: private void button1_Click(object sender, EventArgs e)        {  ...

  6. SQL查询语句执行的顺序是-----------------

    MSSQL逻辑查询的步骤 摘自:Microsoft SQL Server 2005技术内幕:T-SQL查询: 逻辑查询处理中的各个阶段 本节介绍逻辑查询处理所涉及的各个阶段.我先简要描述一下每个阶段, ...

  7. [转] 解决HttpServletResponse输出的中文乱码问题

    首先,response返回有两种,一种是字节流outputstream,一种是字符流printwrite. 申明:这里为了方便起见,所有输出都统一用UTF-8编码. 先说字节流,要输出“中国" ...

  8. Ubuntu中启用关闭Network-manager网络设置问题!

    Ubuntu中启用关闭Network-manager网络设置问题! [Server版本] 在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/net ...

  9. iOS开发官方文档汇总

    程序员的学习过程是无止境的,程序员学习的途径是多样的.可以从视频教程中领悟,也可以从他人的代码中 理解.但当我们专注于某一个平台在开发的时候,对于某个API使用或者功能实现有疑问,通常简单的测试可以让 ...

  10. Windows下利用Windbg 分析dump

    概述: 注册生成dump文件的函数. 当程序收到没有捕获的异常时,调用上述函数,生成dump文件. 利用Windbg结合编译程序时生成的pdb和代码来分析dump文件,定位问题. 如下代码生成dump ...