Нужен ли O_LARGEFILE только для записи большого файла?
-
04-10-2019 - |
Вопрос
Является ли O_LARGEFILE
флаг необходим, если все, что я хочу сделать, это записать большой файл (O_WRONLY
) или добавить в большой файл (O_APPEND | O_WRONLY
)?
Из темы, которую я прочитал под названием "Не удается записать индексный файл объемом >2 ГБ" в списке рассылки CLucene-dev, похоже, что O_LARGEFILE
может потребоваться для записи больших файлов, но участники этого обсуждения используют O_RDWR
, не O_WRONLY
, так что я не уверен.
Решение
O_LARGEFILE
никогда не должен использоваться непосредственно приложениями.Он должен использоваться внутри 64-разрядной версии, совместимой со смещением open
в libc, когда он выполняет системный вызов ядра (Linux или, возможно, другое ядро с этим 64-битным режимом смещения - это бессмыслица гражданина второго сорта).Просто убедитесь, что вы всегда включаете -D_FILE_OFFSET_BITS=64
в вашем CFLAGS
и тебе никогда ни о чем не придется беспокоиться.
Другие советы
IIRC, если вы делаете
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
До всех остальных включает вам не нужно пройти этот флаг.