c语言 - 实现每隔1秒向文件中写入当前系统时间

实现思路

主要是通过库函数和结构体获取当前系统时间(年月日和时分秒)保存到变量里,然后通过格式化输出函数将当前系统时间输出到文件中去。

但是需要注意的是题目要求每隔 1 s对系统时间进行输出,所以需要加入 sleep()函数进行调整 ,而且如果加入 sleep() 函数还想要输出数据到文件中的话是必须要在每一次输出数据后刷新缓冲区的。

c 复制代码
#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	FILE *fp;
	time_t current_time;
	struct tm *local_time;

	if((fp = fopen("test.txt", "w")) == NULL)
	{
		perror("fopen");
	}


	int i = 0;

	while (1)
	{
	    time(&current_time);
	    local_time = localtime(&current_time);
		int year = local_time->tm_year + 1900; 
		int month = local_time->tm_mon + 1;
		int day = local_time->tm_mday;
		int hour = local_time->tm_hour;
		int minute = local_time->tm_min;
		int second = local_time->tm_sec;
		i++;
		printf("%d-%d-%d %d:%d:%d\n", year, month, day, hour, minute, second);
		fprintf(fp, "%d, %d-%d-%d %d:%d:%d\n", i, year, month, day, hour, minute, second);
		fflush(fp);
		sleep(1);
	}


	return 0;
}

存在的问题

  • 我在写这个程序的时候把 时间戳的获取和年月日时分秒的赋值 放在了循环体外,导致每一次输出到文件的系统时间都不变,其实必须放在循环体内才能获得每一秒的时间戳从而获得正确的数据
  • 使用 sleep() 函数发现系统时间数据并没有输出到文件中,后来发现是没有加 fflush 对缓冲区进行刷新。
  • 不会获取当前系统时间,一定要记住这个获取当前系统时间的方式!
  • 对于标准输出 '\n' 会导致自动刷新缓冲区,但是对于文件没有用,也就是这里的 fprintf 函数里的 '\n' 对于自动刷新缓冲区没用。
相关推荐
河西石头5 小时前
再谈C#的抽象类和接口:从“适配器”到“毛坯房”的设计哲学
开发语言·c#·接口·依赖注入·抽象类·依赖倒挂
颜x小5 小时前
[C#]——接口与继承
开发语言·c++·c#
冻柠檬飞冰走茶5 小时前
PTA基础编程题目集 7-17 爬动的蠕虫(C语言实现)
c语言·开发语言·数据结构·算法
咯哦哦哦哦5 小时前
qt creator x86交叉编译arm 配置
开发语言·qt
乐启国际旅行社有限公司6 小时前
Java线程池实战:文旅系统批量任务性能优化(团期生成/数据导出)
java·开发语言·性能优化
会编程的土豆6 小时前
LeetCode 热题 HOT100(一):哈希表与双指针入门(Go 实现)
算法·leetcode·职场和发展
学习中.........6 小时前
并行 BPE 训练 与 手写 `Tokenizer`
人工智能·算法·机器学习·语言模型
宸津-代码粉碎机6 小时前
告别手动Jar部署!生产级无损热部署方案,彻底解决OOM与更新失效问题
java·大数据·开发语言·人工智能·python
米码收割机6 小时前
【移动】线上购物移动端网站(源码+文档)【独一无二】
java·开发语言·前端·python·django
小肝一下6 小时前
多态(上)
android·开发语言·c++·vscode·多态·面向对象·伊蕾娜