作业 编程读写-一个文件test.txt ,每隔1秒向文件中写入年月日时分秒行 数据。5.12

该程序使用C语言编写,以无限循环的方式每隔1秒向文件new_test3.txt追加行数据,内容格式为序号和时间戳。程序在启动时会检查文件是否存在,如果不存在则从序号1开始,否则根据已有行数确定起始序号。它利用time()和localtime()获取和格式化当前时间,并通过sleep()函数实现间隔。程序可通过Ctrl+C中断。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独memories

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值