题目要求:编程读写-一个文件test.txt ,每隔1秒向文件中写入行数据,类似这样:
1, 2007-7-30 15:16:42
2, 2007-7-30 15:16:43
该程序应该无限循环,直到按Ctr1-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开始写入;如果不是新文件,则统计原来有多少行,比如有n行,然后从序号n+1开始写入。以后每写多少行就把行号加1。
获取当前的系统时间需要调用函数time(),得到的结果是一一个time_t类型,其实就是一个大的结构体,
其值表示从UTC时间1970年1月1日00:00:00 (称为UNIX的Epoch时间)到当前时刻的秒钟数。然后调用localtime ()将time_ t所表示的UTC时间转换为本地时间(我们是+8区,比UTC多8个小时),并转成struct tm*类型,该类型的各数据成员分别表示年月日时分秒,请自己写出转换格式的代码,不要使
用ct ime ()或asctime ()函数。具体用法请查阅man page。 time和localt ime函数需要头文件time. h。
调用sleep(n)可使程序睡眠n秒,该函数需要头文件unistd. h。
/*===============================================
* 文件名称:time_test.demo.c
* 创 建 者:memories
* 创建日期:2023年05月10日
* 描 述:
================================================*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "time_test.demo.h"
time_e nowtime()
{
time_e p = malloc(sizeof(timee));
if(p==NULL)
return NULL;
char *q=malloc(sizeof(size));
bzero(p,sizeof(p));
time_t now;
struct tm *nowtime;
time(&now);
nowtime=localtime(&now);
p->year=nowtime->tm_year+1900;
p->month=nowtime->tm_mon+1;
p->day=nowtime->tm_mday;
p->hour=nowtime->tm_hour;
p->minute=nowtime->tm_min;
p->second=nowtime->tm_sec;
}
/*===============================================
* 文件名称:time_test.demo.h
* 创 建 者:memories
* 创建日期:2023年05月10日
* 描 述:
================================================*/
#ifndef __time_test_demo_H_
#define __time_test_demo_H_
#define size 100
typedef struct timenow{
int year;
int month;
int day;
int hour;
int minute;
int second;
}timee,*time_e;
//时间创建函数
time_e nowtime();
#endif
/*===============================================
* 文件名称:time_demo.c
* 创 建 者:memories
* 创建日期:2023年05月10日
* 描 述:
================================================*/
#include <stdio.h>
#include <time.h>
#include "time_test.demo.h"
#include <unistd.h>
int main(int argc, char *argv[])
{
int i=0;
FILE *fp=fopen("new_test3.txt","a+");
while(1)
{
int ret = getc(fp);
if(ret=='\n')
{
i++;
}
if(feof(fp))
{
printf("ok,letsgo\n");
break;
}
}
while(1)
{
time_e p=nowtime();
char buf[100]={0};
sprintf(buf,"%d %d-%d-%d %d:%d:%d\n",i,p->year,p->month,p->day,p->hour,p->minute,p->second);
fputs(buf,fp);
fflush(fp);
printf("%s\n",buf);
sleep(1);
i++;
}
fclose(fp);
return 0;
}