我正在将数据从文件读取到以以下方式打开的内存:
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。
EOF
根据参考feof,EOF遇到时应返回非零值。
feof
为什么是这样?该feof功能没用吗?
请注意,我目前正在使用的返回值fgetc来检查EOF。
fgetc
寻求根本无法测试文件的结尾。
这样做的原因是您可能想在自己想要的fwrite()地方做。fseek()被调用后无法知道您的计划是什么。
fwrite()
fseek()
fread()在文件末尾进行查找后再执行一次,您将feof()返回非零值。
fread()
feof()