要求:
1、读写一个test.txt文件,每隔1秒往文件中写入一行时间日期数据,格式: 2023-9-4 20:47:38
2、下次启动程序时追加到原文件之后,并且序号能够衔接上原先序号。
备注:
1、a+以读写方式打开文件,读从文件开始,写从文件尾开始;
2、char *fegts(char *str,int n,FILE *stream)从指定的流stream中读取一行,并把它存储在str所指向的字符串内,当读取(n-1)个字符或者读取到换行符,或者到达文件末尾时,便停止,具体视情况而定;
3、struct tm*localtime(const time_t *timep)//参数:保存当前秒数的地址,返回值:tm结构体指针,转换的本地时间保存在指针指向的结构体中;
程序:
#include <stdio.h>
#include <unistd.h>//sleep
#include <time> //time/localtime
#include <string.h>
int main()
{
FILE *fp;
int line = 0;//记录行号
char buf[64];//定义缓冲区
time_t t;
struct tm *tp
//a+以读写方式打开文件,读从文件开始,写从文件尾开始
if((fp = fopen("test.txt","a+")) == NULL)
{
perror("fopen");
return -1;
}
//先统计原文件中有多少行;
/*char *fegts(char *str,int n,FILE *stream)从指定的流stream中读取一行,
并把它存储在str所指向的字符串内,当读取(n-1)个字符或者读取到换行符,
或者到达文件末尾时,便停止,具体视情况而定*/
while(fgets(buf,64,fp)!= NULL)
{
//判断是否读到完整的一行
if(buf[strlen(buf)-1] == '\n') //结束符的前一个位置是换行符则读到了完整的一行
line++;
}
while(1)
{
time(&t);//获取系统当前时间,并保存在变量t中,存的是秒数
//struct tm*localtime(const time_t *timep)//参数:保存当前秒数的地址
//返回值:tm结构体指针,转换的本地时间保存在指针指向的结构体中
tp = localtime(&t);
fprintf(fp,"%02d,%d-%02d-%02d %2d:%02d:%02d\n",++line,tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);//输入到指定文件中
printf("%02d,%d-%02d-%02d %2d:%02d:%02d\n",line,tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);//在屏幕上打印,便于看效果
//强制刷新,确保字符串立刻写到实际文件中
fflush(fp);//默认打开的普通文件是全缓冲
sleep(1);//1s睡眠
}
return 0;
}