c - 在C中向后读取文本文件

标签 c text stream standard-library

用 C 语言逆向读取文件的最佳方式是什么?我知道一开始您可能会认为这没有任何用处,但是大多数日志等都会在文件末尾附加最新数据。我想从文件中向后读入文本,将其缓冲成行 - 即

美国广播公司
定义

应按行阅读 ghidefabc

到目前为止我已经尝试过:

    #include <stdio.h>
    #include <stdlib.h>

    void read_file(FILE *fileptr)
    {
        char currentchar = '\0';
        int size = 0;

        while( currentchar != '\n' )
        {
            currentchar = fgetc(fileptr); printf("%c\n", currentchar);
            fseek(fileptr, -2, SEEK_CUR);
            if( currentchar == '\n') { fseek(fileptr, -2, SEEK_CUR); break; }
            else size++;

        }
        char buffer[size]; fread(buffer, 1, size, fileptr);
        printf("Length: %d chars\n", size);
        printf("Buffer: %s\n", buffer);


    }


    int main(int argc, char *argv[])
    {
        if( argc < 2) { printf("Usage: backwards [filename]\n"); return 1; }

        FILE *fileptr = fopen(argv[1], "rb");
        if( fileptr == NULL ) { perror("Error:"); return 1; }

        fseek(fileptr, -1, SEEK_END); /* Seek to END of the file just before EOF */
        read_file(fileptr);


        return 0;


    }

试图简单地读取一行并缓冲它。对不起,我的代码很糟糕,我变得非常困惑。我知道你通常会为整个文件分配内存然后读入数据,但对于不断变化的大文件我认为直接读取会更好(特别是如果我想在文件中搜索文本)。

提前致谢

* 抱歉忘了说这将在 Linux 上使用,所以换行符只是 NL 而没有 CR。 *

最佳答案

您可以通过程序 tac 将输入通过管道传输,这类似于 cat 但倒退!

http://linux.die.net/man/1/tac

关于c - 在C中向后读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14834267/

相关文章:

c - 确定一个字符串是否具有所有唯一字符?

c - 奇数 'skip' 函数 : error when running is double loops

c - 如何在C中将字符串转换为整数?

php - 是否有任何已知的 php 库可以像 Quora 在其通知提要中那样标记文本更改?如果不是,我应该使用什么算法?

C++ 级联流插入(硬件帮助)

c++ - 例如为什么有人应该在 C/C++ 中使用三重指针?

html - 如何选择 div 中的两个不同输入类型的文本?

Python:将文本文件读入字典并忽略注释

javascript - 完成可写流

c# - 如何在不写入磁盘或在内存中加载完整文件的情况下压缩文件并通过 HTTP 发送?