2013-10-24 4 views
0

В соответствии с файлом unix man ftell либо возвращает -1, чтобы указать на ошибку.Ошибки ftell на действительно больших файлах

Определение функции является:

long int ftell (FILE * stream); 

Где long int это 32-битное целое (вам нужно long long 64 бит)

однако (-1L) == 0x00000000FFFFFFFF LL, который должен быть допустимым значением для очень больших файлов (окружали 4 ГБ), в этом случае, как мы узнаем, произошла ли ошибка или у нас просто большой файл?

+0

Вы можете проверить 'errno' или переключиться на' off64_t ftello64 ​​(FILE * stream) '. Столкновение файла с размером> 2^63 в байтах по крайней мере менее возможно, чем у одного, имеющего> 2^31 байта. – Neet

+0

@Neet оставьте свой комментарий как ответ. – doron

+0

«Где длинное int - 32-битное целое» - я думаю ** нет. ** Ничто не гарантирует/не требует этого. На любой разумной 64-битной реализации это на самом деле 64 бита. (Вы читаете это правильно - Windows не считается «разумной реализацией».) –

ответ

2

Вы можете либо проверить errno, либо использовать 64-разрядную версию ftell под названием off64_t ftello64(FILE *stream).

Смежные вопросы