问题:每隔1秒向文件1.txt写入当前系统时间,行号递增
算法思路:
1、time() 用来获取系统时间(秒数);
time_t time(time_t *seconds)
1970.1.1 0:0:0到现在的秒数
2、localtime() 将系统时间转换为本地时间;
struct tm *localtime(const time_t *timer)
struct tm {
int tm_sec; /* 秒,范围从 0 到 59
int tm_min; /* 分,范围从 0 到 59
int tm_hour; /* 小时,范围从 0 到 23
int tm_mday; /* 一月中的第几天,范围从 1 到 31
int tm_mon; /* 月份,范围从 0 到 11
int tm_year; /* 自 1900 起的年数
int tm_wday; /* 一周中的第几天,范围从 0 到 6
int tm_yday; /* 一年中的第几天,范围从 0 到 365
int tm_isdst; /* 夏令时
};
注意:
int tm_mon 。。。。获取的值要加1是正确月份;
int tm_tear 。。。。获取的值要加1900是正确的年份;
3、获取文件内的所有行数量:
while(fgets (buf, 32, fp) != NULL) {
//判断是否是一行结束
if (buf[strlen(buf)-1] == '\n') {
linecount++;
}
}
4、写完文件记得fflush ,刷新流, 写到磁盘中去。
代码实现
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
int main(int argc, const char *argv[])
{
FILE *fp;
time_t ctime;
struct tm *ctimestr;
int linecount = 0;
char buf[32];
fp = fopen("test.txt", "a+");
if (fp == NULL) {
perror("fopen");
return 0;
}
while(fgets(buf, 32, fp) != NULL) {
if (buf[strlen(buf)-1] == '\n') {
linecount++;
}
}
while (1) {
ctime = time(NULL);
ctimestr = localtime(&ctime);
printf("%d, %04d-%02d-%02d %02d:%02d:%02d\n", linecount, ctimestr->tm_year+1900, ctimestr->tm_mon+1, ctimestr->tm_mday,
ctimestr->tm_hour, ctimestr->tm_min, ctimestr->tm_sec);
fprintf(fp, "%d, %04d-%02d-%02d %02d:%02d:%02d\n", linecount, ctimestr->tm_year+1900, ctimestr->tm_mon+1, ctimestr->tm_mday,
ctimestr->tm_hour, ctimestr->tm_min, ctimestr->tm_sec);
fflush(fp);
linecount++;
sleep(1);
}
fclose(fp);
}