Как уже пояснили комментаторы, можно ли открыть файл размером более 2 ГБ, зависит от ОС и библиотеки C, а не от компилятора на sizeof(long)
.Если ваша ОС поддерживает такие файлы, вы должны иметь возможность fopen
их, хотя вам, возможно, придется установить флаг (#define _FILE_OFFSET_BITS 64
для Linux).
Тогда fseek
действительно не может искать позиции дальшедалеко, чем LONG_MAX
за один звонок.Вы можете либо вызвать fseek
несколько раз в цикле, что может быть громоздко, либо проверить, есть ли у вашей платформы fseeko
, которая принимает аргумент смещения типа off_t
.Этот тип должен быть достаточно большим, чтобы фиксировать размер любого (обычного) файла в вашей системе, если вы установите правильные параметры.fseeko
доступен в более новых версиях Linux и всех POSIX-2001-совместимых ОС.