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

news2025/6/4 17:29:32

(目录)

先说一些在计算机中需要用到时间的地方:系统日志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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能优化 - 理论篇:常见指标及切入点

文章目录 引言一、 Java 性能优化的核心思路二、为什么要度量&#xff1f;三、常用性能衡量指标详解3.1 吞吐量与响应速度3.2 响应时间的具体度量&#xff1a;平均响应时间与百分位数3.3 并发量3.4 秒开率&#xff08;页面秒开&#xff09;3.5 正确性&#xff08;功能可用性&am…

【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】

论文阅读 | PR 2024 |ICAFusion&#xff1a;迭代交叉注意力引导的多光谱目标检测特征融合 1.摘要&&引言2.方法2.1 架构2.2 双模态特征融合&#xff08;DMFF&#xff09;2.2.1 跨模态特征增强&#xff08;CFE&#xff09;2.2.2 空间特征压缩&#xff08;SFS&#xff09;…

华为OD机试真题——模拟消息队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…

MySql(十三)

目录 mysql外键约束 准备工作 创建表 插入数据 创建表时添加外键 1..格式 2..创建表student表时&#xff0c;为其添加外键 3.插入数据测试 正常数据 异常数据 3.使用alter添加外键 删除外键 添加外键 4.Mysql外键不生效的原因 修改引擎 phpystudy的mysql位置 mysql外键约束 注&…

iOS —— UI 初探

简介 第一次新建时&#xff0c;你可能会好奇。为什么有这么多文件&#xff0c;他们都有什么用&#xff1f; App 启动与生命周期管理相关 文件名 类型 作用 main.m m 程序入口&#xff0c;main() 函数定义在这里 AppDelegate.h/.m h/m App 启动/进入后台/退出等全局事…

day23-计算机网络-1

1. 网络简介 1.1. 网络介质 网线&#xff1a;cat5,cat5e 六类网线&#xff0c;七类网线&#xff0c;芭蕾网线光纤&#xff1a;wifi&#xff1a;无线路由器&#xff0c;ap5G 1.2. 常见网线类型 1.2.1. 双绞线&#xff08;Twisted Pair Cable&#xff09;【最常用】 按性能主…

C语言基础(09)【数组的概念 与一维数组】

数组 数组的概念 什么是数组 数组是相同类型、有序数据的集合。 数组的特征 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间&#xff0c;是同构的)数组中的元素存放在内存空间建立。 衍生概念&#xff1a;下标&#xff08;索引&#xff09; 下标或者索引代表…

【JavaScript】Ajax 侠客行:axios 轻功穿梭服务器间

一、AJAX 概念和 axios 使用讲解 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端…

Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required

可尝试换django版本 pip install django3.2.13 另外mysql下载地址 https://dev.mysql.com/downloads/installer/ 安装可以参考&#xff1a; https://blog.csdn.net/HHHQHHHQ/article/details/148125549 重点&#xff1a;用户变量添加 C:\Program Files\MySQL\MySQL Server …

2025年- H57-Lc165--994.腐烂的橘子(图论,广搜)--Java版

1.题目描述 2.思路 3.代码实现 import java.util.LinkedList; import java.util.Queue;public class H994 {public int orangesRotting(int[][] grid) {//1.获取行数int rowsgrid.length;int colsgrid[0].length;//2.创建队列用于bfsQueue<int[]> quenew LinkedList<…

(9)-Fiddler抓包-Fiddler如何设置捕获Https会话

1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议&#xff0c;不像前十几年前直接是http协议直接裸奔在互联网。接着讲解如何抓取https协议会话。 2.什么是HTTPS&#xff1f; HTTPS就是加过密的HTTP。使用HTTPS后&#xff0c;浏览器客户端和Web服务器传输的数…

Vue-Router 基础使用

Vue Router 是 Vue 官方的客户端路由解决方案。 客户端路由的作用是在单页应用 SPA 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时&#xff0c;URL 会随之更新&#xff0c;但页面不需要从服务器重新加载。 Vue Router 基于 Vue 的组件系统构建&a…

【案例分享】蓝牙红外线影音遥控键盘:瑞昱RTL8752CJF

蓝牙红外线影音遥控键盘 Remotec的无线控制键盘采用瑞昱蓝牙RTL8752CJF解决方案&#xff0c;透过蓝牙5.0与手机配对后&#xff0c;连线至 Remotec 红外 code server 取得对应影音视觉设备的红外 code后&#xff0c;即可控制多达2个以上的影音视觉设备&#xff0c;像是智能电视…

网络协议的原理及应用层

网络协议 网络协议目的为了减少通信成本&#xff0c;所有的网络问题都是传输距离变长的问题。 协议的概念&#xff1a;用计算机语言来发出不同的信号&#xff0c;信号代表不同的含义&#xff0c;这就是通信双方的共识&#xff0c;便就是协议。 协议分层&#xff08;语言层和…

Express教程【003】:Express获取查询参数

文章目录 3、获取URL中携带的查询参数3.1 参数形式&#xff1a;查询字符串3.2 参数形式&#xff1a;动态参数3.3 参数形式&#xff1a;Json数据 3、获取URL中携带的查询参数 3.1 参数形式&#xff1a;查询字符串 1️⃣通过req.query对象&#xff0c;可以访问到客户端通过查询…

输入ifconfig,发现ens33不见了,无法连接至虚拟机

输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 输入ifconfig&#xff0c;发现ens33不见了&#xff0c;无法连接至虚拟机 当输入ifconfig&#xff0c;发现少了ens33&#xff0c;无…

Java虚拟机内存区域划分

Java虚拟机内存区域划分 Java虚拟机&#xff08;JVM&#xff09;的内存区域划分主要分为五个部分&#xff1a; 程序计数器&#xff1a;程序计数寄存器&#xff0c;给CPU使用本地方法栈&#xff1a;为JVM使用到的Native方法服务方法区&#xff1a;存储的是编译后的.class文件堆…

网络渗透基础:信息收集

1.信息收集 whois xx.com 域名注册信息 注册人、电话、email Whois.chinaz.com kali自带whois工具 域名备案信息 Beian.miit.gov.cn Tianyancha.com Icp.chinaz.com 爱站 Sou.xiaolanben.com 2.子域名收集 收集方式 枚举&#xff1a;基于字典搜索引擎&#xff1a;googleh…

[SAP] 如何查询当前屏幕的Tcode?

事务代码Tcode是SAP中到达特定屏幕的快捷路径 如何查询以下屏幕的事务码Tcode&#xff1f; 要浏览当前所使用的屏幕的事务码&#xff0c;可以选择System | Status 这里的事务代码是[VA22]&#xff0c;它是Change Quotation的事务代码

ZigBee 协议:开启物联网低功耗通信新时代

在物联网蓬勃发展的时代&#xff0c;无线通信技术犹如连接万物的桥梁&#xff0c;而 ZigBee 协议以其独特的优势&#xff0c;在众多通信协议中脱颖而出&#xff0c;成为构建低功耗、可靠物联网网络的关键技术之一。 一、ZigBee 协议的起源与发展 ZigBee 这个名字充满了自然的灵…