The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"fsetpos64, fgetpos64"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"fsetpos64, fgetpos64" 
Сообщение от Romul1 emailИскать по авторуВ закладки(ok) on 05-Июл-05, 19:10  (MSK)
Здравствуйте.
Подскажите что делать с установкой/чтением 64-разрядной позиции файла.
Функции fsetpos64, fgetpos64 оперируют со структурой fpos64_t. Если покопаться в заголовках, можно выяснить что в этой структуре есть поле __pos. Дальше вроде выясняется, что это long long. Но обращение к fgetpos64, если посмотреть, выдает signed long long. Или ddd показывает что то свое.
Вопросы:
1. Где то есть описание структуры fpos64_t?
2. fpos64_t::__pos :  какого оно типа - signed или unsigned?
3. Может, надо какие то макросы объявлять?
4. Как из двух 32-разрядных половинок сформировать корректный fpos64_t?
5. Как из fpos64_t корректно получить младшую и старшую часть?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "fsetpos64, fgetpos64" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 05-Июл-05, 20:12  (MSK)
>Здравствуйте.
>Подскажите что делать с установкой/чтением 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;

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "fsetpos64, fgetpos64" 
Сообщение от Romul1 emailИскать по авторуВ закладки(??) on 06-Июл-05, 14:36  (MSK)
Спасибо.

>В современном C если "знаковость" целого типа не указана, подразумевается
>'signed' (кроме случая с char, там особые правила).

Про знаки вроде разобрался.Почему то решил,что младшая часть long long тоже должна быть signed - смотрел в отладчике и видел фигню.

>то - signed. Однако IMHO отрицательные значения данного поля бессмысленны.

да, тут вроде все чисто. Отрицательные могут понадобиться, например, что бы отличить "плохие" (if (pos<0))

>Едва ли это возможно сделать переносимым способом. Лучше смотреть в
>сторону fseek64()/ftell64(). Для их использования может потребоваться
>отключение макроса __ANSIC__ или ещё какого в том же духе.
>Из fpos64_t в общем случае и переносимым способом - никак.

тут вы меня расстроили. Я то думал что есть какой то стандарт...
А где же посмотреть на эти fseek64()/ftell64() ? man молчит как партизан, в программе stdio не достаточно. Я новичок в linux, может не знаю каких то очевидных путей? В msdn я бы поискал поиском, а тут где искать...


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "fsetpos64, fgetpos64" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 06-Июл-05, 21:44  (MSK)
В первую очередь нужны макросы _LARGEFILE_SOURCE и _LARGEFILE64_SOURCE.
После этого станут доступны функции, работающие с __off64_t.
С документацией на всё это богатство и правда туго.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру