在 C 中向后读取文件的最佳方法是什么?我知道一开始您可能会认为这没有任何用处,但大多数日志等都会在文件末尾附加最新数据。我想从文件中向后读取文本,将其缓冲成行 - 即
abc
def
ghi
应按行阅读ghi,def,abc。
到目前为止,我已经尝试过:
#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 上使用,所以换行符只是没有 CR 的 NL。*