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

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字