题目要求:编程读写一个文件test.txt,每隔1秒向文件中写入一行数据,类似这样:
1, 2007-7-30 15:16:42
2, 2007-7-30 15:16:43
该程序应该无限循环,直到按Ctrl+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.标准IO打开文件fopen,以a+的形式
2.睡眠延时函数sleep(1)
3.计算行数
4.计算时间time 将时间秒数转化为当地时间 localtime
5.向文件中写fprintf 全缓冲
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include<string.h>
int main(int argc, char const *argv[])
{
int len = 1;//从1开始,最开始就是一行
char ch[32] = {0};
FILE *p =fopen("1.txt", "a+");
if (p == NULL)
{
perror("fopen err");
return -1;
}
struct tm* ti;//ti是用来接收下面localtime函数的返回值的
time_t t;
while (1)
{
sleep(1);//睡眠,单位为秒
//这个while循环是用来计算行数的
while (fgets(ch, 32, p) != NULL)
{
if (ch[strlen(ch) - 1] == '\n')
len++;
}
t=time(NULL);
ti=localtime(&t);
fprintf(p,"%d, %d-%d-%d %d:%d:%d\n",len,(ti->tm_year)+1900,(ti->tm_mon)+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec);//年份系统自动减去1900,所以年份要加1900,月份系统是0-11,所以要加一
len++;//行号自动加一
fflush(NULL);
}
fclose(p);
return 0;
}