我正在将文件中的数据读取到打开的内存中:
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
.