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

【Linux系统编程】目录和用户操作 时间函数与实例

一,时间函数

1,引言


在看计算机程序打印的结果的时候,往往long long这种整形数据是人往往不想看到的,人最想看到的数据类型是结构体类型,计算机最想看到的就是整形数据类型等这种机器码,所以就有了上面这个图的相互转换

time_t是通过time()函数将内核的时间信息调用出来使用的一种信息类型
time_t在这里通过我们上面的例子可以猜出来这是一个整形的一个数据,可以强转为long long

struct tm是通过gmtime()函数和locatime()函数将这个time_t类型的数据转换为结构体类型,也就是人最喜欢看的信息
mktime就是将结构体转换为time_t类型给内核

2,time()


这个的用法是

有两种对应的用法接收time函数传来的信息

3,gmtime()/locatime()/mktime()



1,gmtime()/locatime()

通过time返回的一个类型,然后放到这个里面就可以获得一个结构体tm类型,这里就是相较于人喜欢看的一种类型,很简洁明了,结构体上面的就是对应的信息
两者之间的区别就是:一个是格林威治的时间,一个是当地的时间

2,mktime()

这个是将时间的信息编程tm结构体的类型,但是不难看到这里的参数是没有设置const的,所以就会有修改的风险,gmtime()/locatime()这两个是有const的,所以mktime是可能会修改你的结构体的,为什么这样设计,有什么优点和缺点,后续会将

4,strftime()


这个是用一个buffer数组,然后规定大小,格式就是类似于%d这种,然后指向一个tm类型的,这个函数会自动帮你把对应的信息切割出来,然后放到这个format里面

二,时间函数实例

1,实例1

在一个文件里面打印时间戳


由于这里的变量是这样定义的,所以之后的代码不可以直接打印出来,需要加值

#include<stdio.h> #include<stdlib.h> #include<time.h> #include<unistd.h> #define PATH "/home/book/Liunx_system/file_and_user/1.txt" #define BUFFSIZE 1024 int main(int argc, char **argv){ FILE *fp = NULL; char buff[BUFFSIZE]; int count = 0; time_t tmp; struct tm* mytm; fp = fopen(PATH, "a+"); if(fp == NULL){ perror("fopen()"); exit(1); } while((fgets(buff, BUFFSIZE, fp)) != NULL){ count++; } while(1){ time(&tmp); mytm = localtime(&tmp); // strftime(); fprintf(fp, "%-4d%d-%d-%d %d:%d:%d\n", ++count, \ mytm->tm_year+1900, mytm->tm_mon+1, mytm->tm_mday,\ mytm->tm_hour, mytm->tm_min, mytm->tm_sec); // %-4d左对齐 fflush(fp); // 手动刷新缓冲区,因为只有文件IO为行缓冲,其他的默认为全缓冲 // /n起不到刷新缓冲区的作用了 sleep(1); } fclose(fp); exit(0); }

可以使用tail -f 文件 可以实时查看文件的修改

2,实例2

将一个日期加上100天之后的日期是多少

#include<stdio.h> #include<stdlib.h> #include<time.h> #include<unistd.h> #define SIZE 1024 int main(int argc, char **argv){ time_t tm_pos; char buff[SIZE]; struct tm *tm_message; time(&tm_pos); tm_message = localtime(&tm_pos); strftime(buff, SIZE, "%Y-%m-%d %H:%M:%S", tm_message); printf("Now: %s\n", buff); tm_message->tm_mday += 100; // 只能加到mday上,不能加到yday上 mktime(tm_message); strftime(buff, SIZE, "%Y-%m-%d %H:%M:%S", tm_message); printf("100 days after: %s\n", buff); exit(0); }

这里就可以运用到mktime的机制,就是,mktime之所以形参不加const,是因为这个mktime当year,month,day等有溢出的话,他会自动进行进位变成正确的日期。

http://www.jsqmd.com/news/458219/

相关文章:

  • HP8304@ACP#HP8304与MT3905参数对比
  • 汇川H3U带10轴(3伺服7步进)+IT6100E触摸屏项目,上下料机,7个步进加了一个4PM...
  • 增加Swap分区
  • 专科生收藏!用户挚爱的AI论文网站 —— 千笔·专业学术智能体
  • 科研人福音!AI写专著工具大推荐,让创作如行云流水般顺畅
  • 广州迅腾文化传播有限公司发布“阿处共识2.0”:深耕数字化资产管理,构建“恒温”逻辑协同生态
  • 探索自适应滤波器:从LMS算法到Simulink仿真
  • 如何在出售Windows11/10/8/7前彻底清除电脑数据
  • 信捷码垛程序(无宏密码版)
  • 系统编码规范文件Word
  • 【Gemini快速】在美国的工作场合中,一个新人如何在任何时间遇到任何人都不尴尬
  • 监控机房NTP同步时钟卫星校时电子钟实现时间戳统一
  • 本地部署 Ollama 完整指南:3 分钟让大模型在你电脑上跑起来
  • 文献检索关键词用几个最合适?给你一个可操作的范围
  • Next 10 TCP并发,数据库
  • 排序算法的终极博弈:从复杂度推导到工程选型实战
  • keil破解时报TOOLS.INI_TOOLCHAIN NOT INSTALLED解决
  • 全维度测评主流视频会议软件,精选高效协作之选
  • 【稳健之道】第二篇:Mock 的艺术 —— 隔离外部世界的“混沌”
  • Python部署卡壳工业MES?Java+YOLOv11+Spring Boot 3.4完美对接PLC!
  • 搭了个AI快讯自动化系统,每天花15分钟看全球AI动态,竟遭Claude封号了
  • MetaNovas两轮融资,AI改写材料研发格局
  • 讲讲2026年学校制冷设备一站式采购批发,如何选择靠谱厂家 - 工业推荐榜
  • 一文吃透AI合规:算法备案、大模型备案、大模型登记!
  • 口碑好的中央空调厂家排名,浙江省有哪些值得选 - mypinpai
  • KIHU快狐|75寸落地全面屏广告机高清展示教学会议信息发布终端
  • 大数据基于Python的大模型岗位人才需求可视化分析
  • 什么是 Java 的 Timer?
  • 写给技术管理者的低代码手册系列文章(8)——第二部分:低代码的概念、价值与发展现状(第四章)
  • 别等着被优化:DevOps 工程师转型 AI 工程师,为什么反而更有优势?