>Здравствуйте.
>Подскажите что делать с установкой/чтением 64-разрядной позиции файла.
>Функции fsetpos64, fgetpos64 оперируют со структурой fpos64_t. Если покопаться в заголовках, можно
>выяснить что в этой структуре есть поле __pos. Дальше вроде выясняется,
>что это long long. Но обращение к fgetpos64, если посмотреть, выдает
>signed long long. Или ddd показывает что то свое.
В современном C если "знаковость" целого типа не указана, подразумевается
'signed' (кроме случая с char, там особые правила).
>Вопросы:
>1. Где то есть описание структуры fpos64_t?
Разве что в документации на применяемую Вами ОС. Существующие стандарты
не определяют тип данных этой структуры - он платформенно зависимый.
>2. fpos64_t::__pos : какого оно типа - signed или unsigned?
Если он описан как
long long __pos;
то - signed. Однако IMHO отрицательные значения данного поля бессмысленны.
>3. Может, надо какие то макросы объявлять?
Для чего, собственно?
>4. Как из двух 32-разрядных половинок сформировать корректный fpos64_t?
Едва ли это возможно сделать переносимым способом. Лучше смотреть в
сторону fseek64()/ftell64(). Для их использования может потребоваться
отключение макроса __ANSIC__ или ещё какого в том же духе.
>5. Как из fpos64_t корректно получить младшую и старшую часть?
Из fpos64_t в общем случае и переносимым способом - никак.
Из 64-битного смещения - весьма легко:
long long offset = lalala;
long offsetLo = offset & 0xFFFFFFFF;
long offsetHi = offset >> 32;