Мне нужно добавить LFS в процесс C, который использует fseek()
. gcc и glibc имеют версии 3.2.3 и 2.5 соответственно.Почему fseeko() не работает с EINVAL?
Я сделал следующие изменения:
- добавил
CFLAGS += -D_FILE_OFFSET_BITS=64
в Makefile. - Я заменил вызов на
fseek()
с вызовом наfseeko()
(мне также нужна поддержка MSVC6, но по одному шагу за раз). - Я изменил тип второго аргумента на
off_t
.sizeof()
от переменной возвращается 8.
Вот как хороший пример main()
, как я могу получить мимо нашего DLP и его выход:
fd = fopen("large_file", "rb");
off_t offset = 1ULL << 32;
rc = fseeko(fd, offset, SEEK_SET);
rc = -1 sizeof(offset)=8 errno=22 offset=2147483648
Ваш вопрос идеально подходит для включающего в себя [SSCCE] (http://sscce.org/) вместо словесно описания кода и результат. – NPE
Пожалуйста, разместите достаточно кода, чтобы воспроизвести вашу проблему. – fuz
Какую ОС вы наблюдаете за этим? – alk