2010-07-10 1 views
4

1- я задаюсь вопросом, что было бы проблемой, если я пытаюсь прочитать файл больше 2GB размера без компиляции моей программы с опцией -D_FILE_OFFSET_BITS=64 с помощью off_t и используя вторая функция на this page? это будет segfault?off_t без -D_FILE_OFFSET_BITS = 64 на файл> 2GB

2- Я планирую использовать this implementation с off64_t и

#define _LARGEFILE64_SOURCE 1 
#define _FILE_OFFSET_BITS 64 

Будет ли какие-либо проблемы?

ответ

8
  1. stat() потерпит неудачу, и ERRNO установить в EOVERFLOW в этом случае. Вот , что страница Linux человек говорит

    EOVERFLOW stat()) path refers to a file whose size cannot be 
    represented in the type off_t. This can occur when an application 
    

    составлен на 32-битной платформе без -D_FILE_OFFSET_BITS = 64 вызывает стата() на файл, размер которого превышает (2 < < 31) -1 бит ,

  2. Если вы скомпилируете с -D_FILE_OFFSET_BITS = 64, вам не нужно использовать off64_t. Вы можете просто продолжать использовать off_t, он станет 64-битным, и все функции , касающиеся файлов и размеров файлов, станут 64-битными.
-1

Это не segfault, но размер файла не будет сообщен правильно.

1

Не используйте off64_t явно. Всегда создавайте свои программы с 64-битными смещениями файлов в системах, где необходимо явно указать это. Несоблюдение этого является основной ошибкой, которую ваши пользователи будут ненавидеть. Не знаю, почему это не дефолт по современным системам ...

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