关于Linux文件操作1.2
本文章记录本人在学Linux文件操作过程中的一些题目
题目: 和《关于Linux文件操作1.1》一样
===========================================
先贴代码
#include <stdio.h> #include <unistd.h> #include <string.h> #include <time.h> int main(void) { time_t t; // 如果文件line不存在,那么n就从1开始 int n; FILE *fp; if(access("line.txt", F_OK)) { n = 0; fp = fopen("line.txt", "w"); } // 如果已经存在,就要将其数据读出,作为n的初始值 else { fp = fopen("line.txt", "r+"); fread(&n, sizeof(int), 1, fp); } FILE *fp_time = fopen("test.txt", "a"); while(1) { time(&t); //获取当前的系统时间(秒) n++; //printf( "%d. %s", n, ctime(&t)); // 将时间转换为年月日 fprintf(stdout, "%d. %s", n, ctime(&t)); // 将时间转换为年月日 // 将以上字符串保存在test.txt中 fprintf(fp_time, " %s", ctime(&t)); // 将时间转换为年月日 fflush(fp_time); // 要将当前的序号写入line.txt文件 fseek(fp, 0, SEEK_SET); fwrite(&n, sizeof(int), 1, fp); // 将数据写到缓冲区 fflush(fp); // 将数据刷新到内核并同步到设备 sleep(1); } return 0; }
这个代码逻辑和《关于Linux文件操作1.1》有点不一样
1. 本代码用到两个文件分别用于存放行号、时间。
2. 存放时间的文件test.txt的实现方式直接使用fprintf 将字符串输出到文件
3.多了个存放行号的文件。
1. 由于行号既要读写、第二次打开还不能清空之前的数据、还要能读出行号数据, 用 "a+"模式打开的话能实现: 创建、读写、追加,
但是这模式文件下标偏移到最后这就不能将行号读出(此时lseek函数就不会有效果).
2.所以我们需要进行判断,如果文件不存在那么就以写模式打开,如果存在那么就用读和写的模式打开,所以我们就能读出行号了(通过fseek函数的处理)
3. 我们将行号存到文件的思路是这样的,我们始终将行号这个字符存到 line.txt 文件的头那里(用fseek函数进行处理),
也就是说line.txt文件始终有且仅存着当前最新行号.
奋斗吧....少年..