IO进程练习---往文件中录入当前时间

2024-08-26 22:12

本文主要是介绍IO进程练习---往文件中录入当前时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 题目要求

编程读写一个文件test.txt,每隔1秒向文件中写入一行录入时间的数据,类似这样:

1  2007-7-30 15:16:42  

2  2007-7-30 15:16:43

该程序应该无限循环,直到按Ctrl-C中断程序。

再次启动程序写文件时可以追加到原文件之后,并且序号能够接续上次的序号,比如:

1  2007-7-30 15:16:42

2  2007-7-30 15:16:43

3  2007-7-30 15:19:02

4  2007-7-30 15:19:03

5  2007-7-30 15:19:04

思路:

  1. 打开文件fopen,循环往文件写内容
  2. 每隔1s写入一行,sleep(1);
  3. 计算文件行数,wc -l
  4. 计算当前时间,转换成年月日、时分秒,time,localtime

要实现这个练习,需要用到两个时间的函数

一个是time 

另一个是localtime

还有一个格式化向文件流中输入的函数 fprintf

1》time

man 2 time

time_t time(time_t *tloc);

如果tloc是空指针,直接返回当前时间。如果tloc 不是空指针,返回当前时间的同时,将返回值赋予tloc指向的内存空间。 

 2》localtime

man 3 localtime

struct tm *localtime(const time_t *timep);

返回值是结构体指针,所指结构体封装着年月日时分秒 

 先看一下这两个函数结合使用的结果


#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>int main(int argc, char const *argv[])
{time_t t;//定义一个 time_t 类型的变量,用来存放时间struct tm *time_p;//定义一个 tm (时间)结构体类型的指针time(&t);//将t转换成从1970年至今的秒数printf("秒数: %d\n",t);time_p = localtime(&t);//将这个秒数转换成年月日 时分秒的结构体printf("当前时间: %d-%d-%d  %d:%d:%d\n", time_p->tm_year + 1900, time_p->tm_mon + 1, time_p->tm_mday, time_p->tm_hour, time_p->tm_min, time_p->tm_sec);//将结构体内容打印出来
return 0;
}

 3》fprintf

int fprintf( FILE *stream, const char *format, ... );

格式化输出到流(stream)文件中,返回值是输出的字符数,发生错误时返回一个负值.

和 printf 的用法相似,只是printf是输出到标准输出中,fprintf是输出到文件流中

4》代码实现 

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>int main(int argc, char const *argv[])
{FILE *fp;//定义一个文件流char buf[32] = {};//定义一个数组,待用,后面用来计算行数fp = fopen("time.txt", "r+");//以r+ 方式(可读可写)打开文件time.txt,文件是自己建立的if (NULL == fp)//如果fopen返回NULL; 打开文件失败{printf("fopen lost\n");return -1;}printf("open success\n\n");time_t t;//定义一个 time_t 类型的变量,用来存放时间struct tm *time_p;//定义一个 tm (时间)结构体类型的指针int line = 0;//定义一个变量来表示行数//循环fgets读文件, 只要读到就判断是否有\n, 如果有就累加行数while (fgets(buf, 32, fp) != NULL){if (buf[strlen(buf) - 1] == '\n')line++;//计算当前文件中的行数}//这一步的目的是为了当停止一次输入之后,让下一次输入能紧跟在上一次行数继续输入while (1)//死循环{line++;//让行数加一,刚开始行数初始化为0了,所以先加一time(&t);//转换成秒数time_p = localtime(&t);//转换成年月日时分秒fprintf(fp, "%d %d-%d-%d  %d:%d:%d\n", line,time_p->tm_year + 1900, time_p->tm_mon + 1, time_p->tm_mday, time_p->tm_hour, time_p->tm_min, time_p->tm_sec);//将结构体的年月日时分秒输出到文件流中fflush(NULL);//强制清空缓存区,输出内容sleep(1);//延迟一秒输出}fclose(fp);//关闭流文件return 0;
}

 5》运行结果


今天的分享就到这里结束啦,如果有哪里写的不好的地方,请指正。
如果觉得不错并且对你有帮助的话请给个三连支持一下吧!

这篇关于IO进程练习---往文件中录入当前时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109824

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优