off_t без -D_FILE_OFFSET_BITS = 64 для файла> 2 ГБ - PullRequest
4 голосов
/ 11 июля 2010

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

2- Я планирую использовать эту реализацию с off64_t и

#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64

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

Ответы [ 3 ]

8 голосов
/ 11 июля 2010
  1. stat () завершится ошибкой, и ошибка будет установлена EOVERFLOW в этом случае. Вот что написано на man-странице 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 вызовов stat () на файл, размер которого превышает (2 << 31) -1 бит. </p>

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

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

0 голосов
/ 11 июля 2010

Не должно быть segfault, но размер файла не будет указан правильно.

...