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;
}
単純に1行を読み取り、それをバッファリングしようとします。私のコードがひどいことを残念に思います、私はとても混乱しています。通常はファイル全体にメモリを割り当ててからデータを読み込むことは知っていますが、絶えず変化する大きなファイルの場合は、直接読み取る方がよいと思いました(特に、ファイル内のテキストを検索する場合)。
前もって感謝します
*申し訳ありませんが、これはLinuxで使用されるため、改行はCRなしのNLです。*