#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>unsigned int my_alarm(unsigned int seconds) {struct itimerval new = { {0, 0},{seconds, 0} };struct itimerval old ; // 传出参数,用于获得上一个闹钟的信息,体现在alarm函数的返回值上setitimer(ITIMER_REAL,&new,&old);// 注意:old 结构体包含 “ 秒+毫秒 ”
// 因此: 1s + 400000us 则应该返回 1s , 而 1s + 900000us 则应该返回 2s
// 如果直接返回 old.it_value.tv_sec 有问题,所以要涉及毫秒 “ 四舍五入” 的操作int retval = old.it_value.tv_sec + (old.it_value.tv_usec + 500000)/1000000;return retval;
}
int main()
{unsigned int ret = my_alarm(5);printf("%d\n", ret); // 结果:0sleep(2);ret = my_alarm(4);printf("%d\n", ret); // 结果:3 return 0;
}

说明:while(1){ sleep(1) ; alarm(2)} 也可以实现 setitimer 功能

Linux学习之系统编程篇:利用 setitimer 实现 alarm练习相关推荐

  1. Linux学习之系统编程篇:利用 SIGCHLD 回收子进程

    子进程死亡会给父进程发送 SIGCHLD 信号!(默认动作:父进程忽略该信号)此时父进程就可以捕捉该信号,利用回调函数使用 waitpid 回收子进程. #include <stdio.h> ...

  2. Linux学习之系统编程篇:利用 shm 进行进程间通信

    一.写进程 shm_w.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include ...

  3. Linux学习之系统编程篇:利用管道进行进程间通信

    这里我们先补充一个小知识: 父子进程使用 pipe 进行通信时fork 和 pipe 先后的顺序是先 pipe,后 fork,因为父进程先创建管道,再 fork 创建子进程,这样才能是父子进程共享一块 ...

  4. Linux学习之系统编程篇:对线程的基本认识

    (1)fork()后创建的子进程是父进程的拷贝,那么pthread_create,创建线程,创建的线程跟原进程有什么关系呢? fork 会通过拷贝产生新的虚拟地址空间(PCB 会变化),而 pthre ...

  5. Linux学习之系统编程篇:编写一个守护进程

    需求:写一个守护进程,每隔 2s 获取一次系统时间,将这个时间写入到磁盘文件 #include <stdio.h> #include <stdlib.h> #include & ...

  6. Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式

    一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...

  7. Linux学习之系统编程篇:守护进程(精灵进程、后台进程)

    一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...

  8. Linux学习之系统编程篇:与产生信号有关的函数

    一.kill kill : 给指定的进程法信号. (1)头文件: #include <sys/types.h>#include <signal.h> (2)函数原型: int ...

  9. Linux学习之系统编程篇:信号的基本概念

    一.信号的特点 (1)简单. (2)携带信息量少 . (3)使用在某个特定的场景中(事先约定好). (4)优先级最高. 不建议使用信号进行进程通信因为优先级高会打破原程序的执行过程:能携带的数据过少. ...

最新文章

  1. Eclipse+SVN搭建开发环境
  2. android jar 包 意见反馈功能,android重点jar包详解.docx
  3. Sql Server函数全解三数据类型转换函数和文本图像函数
  4. 学会python如何兼职-学会Python自动制作PPT,立马在兼职群接到一单
  5. PYTHON的函数对参数解析分析
  6. 【MM模块】Releasing Blocked Invoices 释放冻结发票
  7. element显示true或者false_element-ui轮播的简单实现
  8. 在 SAP HANA database Explorer 里添加 HDI 容器
  9. 喜欢爱C/C++的人不要浮躁
  10. 20180918-1 词频统计
  11. 计算机 子分数 游戏图形,Windows7下如何开启和关闭系统分级功能.doc
  12. Djunit工作记录
  13. 函数名的使用-闭包-迭代器
  14. NASM环境搭建+创建虚拟软盘镜像
  15. EWF在win7_x86_x64系统中配置
  16. Android常用库整理
  17. 神经网络自适应反馈控制设计
  18. 2019年SpringBoot视频教程【全网免费】每周更新
  19. JAVA 算法 回溯
  20. 7-3 A-B 本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

热门文章

  1. TNNLS 22|分数不是关键,排名才是关键:针对排行榜的模型“行为”保持与灾难性遗忘的克服...
  2. 迁移学习之域自适应理论简介(Domain Adaptation Theory)
  3. CoSENT:特征式匹配与交互式匹配有多大差距?
  4. 《失控玩家》爆火背后:什么才是拥抱人工智能的正确姿势?
  5. 今日arXiv精选 | 近期必读的5篇Transformers相关论文
  6. 4个Keynote、12篇论文分享、40个Poster,CVPR 2021论文分享会全日程公布
  7. 用最简单的方式训练史上最强ResNet-50,性能超过魔改结构的ResNeSt
  8. 直播 | SemEval-2020自由文本关系抽取冠军方案解读(附NLP竞赛常用技巧总结)
  9. java第五章抽象类与接口5.1-5.3 2020.3.27+31
  10. 一道简单的Fibonacci