关于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文件始终有且仅存着当前最新行号.

 

posted @ 2017-03-01 14:03  得了白学症  阅读(132)  评论(0编辑  收藏  举报