题目要求:编程读写-一个文件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 100typedef 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;
}