Согласно страницам unix man ftell
либо возвращает -1, чтобы указать ошибку.
Определение функции:
long int ftell ( FILE * stream );
Где long int
- 32-битное целое число (вам нужно long long
для 64 бит)
однако (-1L) == 0x00000000FFFFFFFF LL
который должен быть допустимым значением для действительно больших файлов (около 4 ГБ), и в этом случае, как мы узнаем, произошла ли ошибка или у нас просто большой файл?
Вы можете либо проверить errno
либо использовать 64-битную версию ftell
именем off64_t ftello64(FILE *stream)
.
errno
или переключиться наoff64_t ftello64(FILE *stream)
. Обнаружение файла размером> 2 ^ 63 в байтах, по крайней мере, менее возможно, чем файл, имеющий> 2 ^ 31 байта.