次のコマンドで開かれたファイルからメモリにデータを読み込んでいます。
FILE *f = fopen(path, "rb");
ファイルからバイトのコピーを開始する前に、次を使用して開始位置を探します。
/**
* Goes to the given position of the given file.
*
* - Returns 0 on success
* - Returns -1 on EOF
* - Returns -2 if an error occured, see errno for error code
* - Returns -3 if none of the above applies. This should never happen!
*/
static int8_t goto_pos(FILE *f, uint64_t pos)
{
int err = fseek(f, pos, SEEK_SET);
if (err != 0) {
if (feof(f) != 0) return -1;
if (ferror(f) != 0) return -2;
return -3;
}
return 0;
}
問題は、 を超える位置を探してもEOF
、この関数が -1 を返さないことです。
参照によると、遭遇したfeof
ときにゼロ以外の値を返す必要がEOF
あります。
どうしてこれなの?feof
機能が役に立たない?
現在、 の戻り値を使用してfgetc
をチェックしていることに注意してくださいEOF
。