当前位置: 首页 > news >正文

一文详谈Linux中的时间管理和定时器编程

(目录)

先说一些在计算机中需要用到时间的地方:系统日志log、OS调度(时间片、定时器)等等~~

时间的计量

计时的方式发展:日晷、沙漏 -> 机械钟 -> 石英振荡器、晶振 -> 铯原子钟 -> 氢原子钟

计算机中的计时方式:

51单片机:晶振

嵌入式系统:定时器

PC:定时器

实时时钟:独立电源(CMOS电池、手机晶振)

Linux系统中的时间管理

定时器 + 实时时钟

计算机启动之后,Linux内核会先在实时时钟中读取时间,保存到内核中的全局变量xtime(墙上时间)中;jiffies:内核中的全局变量,系统启动以来的节拍数。

C语言获取当前时间

typedef long time_t;
time_t t = time(NULL); // 获得当前时间,UTC时间,1979年1月1日0点开始,以秒为单位
stime(&t);             // 设置时间

时间格式的转化

#include <stdio.h>
#include <time.h>
int main(void)
{time t t=time(NULL);printf("%ld\n",t);struct tm *p;p=localtime(&t);printf ("%d-%d-%d "p->tm year +1900,p->tm mon +1,p->tm mday);printf("%d:%d:%d\n",p->tm hour, p->tm_min, p->tm_sec);p = gmtime(&t);printf ("%d-%d-%d ",p->tm year +1900,p->tm mon +1,p->tm mday);printf("%d:%d:%d\n",p->tm hour,p->tm min,p->tm sec);return 0;
}

这里p指向的struct tm类型的变量在静态内存(库内部)。 

安全替代方案

为解决线程安全和重入问题,Linux 提供了:

  1. localtime_r(可重入版本)
    1. struct tm result;
      localtime_r(&time_val, &result); // 结果存储到用户提供的 `result` 中
    2. 线程安全,因为每个线程使用独立的内存。

    3. 用户需自行管理存储位置(如栈或堆)。

将时间转化为字符串

 

#include <stdio.h>
#include <time.h>
int main(void)
{time t t= time(NULL);printf("%ld\n",t);char *str = NULL;str =ctime(&t);printf("%s\n",str);struct tm *p;p = gmtime(&t);printf("%d-%d-%d ".,p->tm year + 1900,p->tm mon + 1,p->tm mday);printf("%d:%d:%d\n",p->tm hour, p->tm_min, p->tm_sec);str = asctime(p);printf("%s",str);return 0;
}

用户指定格式字符串

 

获得高精度时间

微秒

纳秒

Linux中的定时器

alarm

alarm(3) : 3秒之后,向该进程发送SIGALRM信号。

 interval timer

设置的时间到达后,会重置;alarm只有一次。

POSIX timer

相关文章:

  • 【计算机网络】传输层UDP协议
  • Hive的JOIN操作如何优化?
  • Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)
  • 软件测评中心如何确保软件品质?需求分析与测试计划很关键
  • Linux研学-环境搭建
  • .NET 查找 DLL 的路径顺序
  • Netty 实战篇:为 Netty RPC 框架引入调用链追踪,实现链路透明化
  • 基于原生JavaScript前端和 Flask 后端的Todo 应用
  • YOLOv8目标检测实战-(TensorRT原生API搭建网络和使用Parser搭建网络)
  • DeepSeek-R1-0528-Qwen3-8B 本地ollama离线运行使用和llamafactory lora微调
  • 在 ODROID-H3+ 上安装 Win11 系统
  • NHANES指标推荐:CQI
  • 数据共享交换平台之文件交换
  • 历年上海交通大学计算机保研上机真题
  • 通过实时动作捕捉加速人形机器人训练
  • 避免空值判断
  • 使用Haproxy搭建web群集
  • JavaScript正则表达式
  • CppCon 2014 学习第5天:Where did my performance go
  • 睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 解题报告汇总 | 珂学家
  • 自学做甜品师的网站/百度贴吧人工客服电话
  • pc28网站开发/怎么制作网站?
  • 用jsp做的动态网站/广州seo怎么做
  • 动态网站设计与实现论文/厦门seo排名优化公司
  • 电子政务与网站建设工作总结/百度关键词排名优化
  • phpcms v9 网站建设入门/网站外链分析工具