Ну, вы всегда можете проверить длину файла перед выполнением fseek
.
void safe_seek(FILE* f, off_t offset) {
fseek(f, 0, SEEK_END);
off_t file_length = ftell(f);
if (file_length < offset) {
// throw!
}
fseek(f, offset, SEEK_SET);
}
Имейте в виду, что это не потокобезопасно.