The OpenNET Project / Index page

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

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

"Запись/чтение двоичных файлов"
Сообщение от ghost emailИскать по авторуВ закладки on 03-Мрт-04, 17:15  (MSK)
Hi All! Подскажите чайнику, есть ли библиотеки для записи/чтения двоичных файлов в произвольные структуры? Какая-нибудь структура передается функции и та заполняет ее из файла. И наоборот, структура в файл записываеться. Так как записей миллионы и они в большинстве своем float то и процедуру надо работающую с бинарными файлами. Спасибо.
ОС Linux,
язык С,
компилятор gcc.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "Запись/чтение двоичных файлов"
Сообщение от vnp emailИскать по авторуВ закладки on 04-Мрт-04, 10:53  (MSK)
>Hi All! Подскажите чайнику, есть ли библиотеки для записи/чтения двоичных файлов в
>произвольные структуры? Какая-нибудь структура передается функции и та заполняет ее из
>файла. И наоборот, структура в файл записываеться. Так как записей миллионы
>и они в большинстве своем float то и процедуру надо работающую
>с бинарными файлами. Спасибо.
>ОС Linux,
>язык С,
>компилятор gcc.

В большинстве случаев вполне достаточно read() и write(). Условия такие: читающая программа и пишущая программа опираются на одно и то же определение структуры (включают один и тот же #include), собраны с одинаковым пониманием выравнивания (alignment и padding) и работают на одной и той же endianness. Это - самый быстрый метод.

Если же условия не соблюдены, простого (и хорошего) способа нет.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Запись/чтение двоичных файлов"
Сообщение от ghost emailИскать по авторуВ закладки on 04-Мрт-04, 15:46  (MSK)
>>Hi All! Подскажите чайнику, есть ли библиотеки для записи/чтения двоичных файлов в
>>произвольные структуры? Какая-нибудь структура передается функции и та заполняет ее из
>>файла. И наоборот, структура в файл записываеться. Так как записей миллионы
>>и они в большинстве своем float то и процедуру надо работающую
>>с бинарными файлами. Спасибо.
>>ОС Linux,
>>язык С,
>>компилятор gcc.
>
>В большинстве случаев вполне достаточно read() и write(). Условия такие: читающая программа
>и пишущая программа опираются на одно и то же определение структуры
>(включают один и тот же #include), собраны с одинаковым пониманием выравнивания
>(alignment и padding) и работают на одной и той же endianness.
>Это - самый быстрый метод.
>
>Если же условия не соблюдены, простого (и хорошего) способа нет.

А как заставить компилятор использовать одинаковые понимания выравнивания
(alignment и padding)? Нет ли какого-нибудь примера или статьи?
Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Запись/чтение двоичных файлов"
Сообщение от SalieFF emailИскать по авторуВ закладки on 04-Мрт-04, 19:08  (MSK)
>>>Hi All! Подскажите чайнику, есть ли библиотеки для записи/чтения двоичных файлов в
>>>произвольные структуры? Какая-нибудь структура передается функции и та заполняет ее из
>>>файла. И наоборот, структура в файл записываеться. Так как записей миллионы
>>>и они в большинстве своем float то и процедуру надо работающую
>>>с бинарными файлами. Спасибо.
>>>ОС Linux,
>>>язык С,
>>>компилятор gcc.
>>
>>В большинстве случаев вполне достаточно read() и write(). Условия такие: читающая программа
>>и пишущая программа опираются на одно и то же определение структуры
>>(включают один и тот же #include), собраны с одинаковым пониманием выравнивания
>>(alignment и padding) и работают на одной и той же endianness.
>>Это - самый быстрый метод.
>>
>>Если же условия не соблюдены, простого (и хорошего) способа нет.
>
>А как заставить компилятор использовать одинаковые понимания выравнивания
>(alignment и padding)? Нет ли какого-нибудь примера или статьи?
>Спасибо.


Компилятор можно заставить отказацца от алаймента (-fno-pack) но делать этого крайне не советую, ибо большинство системных либ может встать раком. Гораздо правильнее выровнять свои структуры по ширине шины (т.е. для IA32 размер структуры должен быть кратен 4м байтам), сделать это можно добавлением  неиспользуемых данных, к примеру в 18-байтную структуру (обрати внимание, что ее sizeof=20) добавить поле char unused[2]

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Запись/чтение двоичных файлов"
Сообщение от ghost emailИскать по авторуВ закладки on 04-Мрт-04, 19:27  (MSK)
>>А как заставить компилятор использовать одинаковые понимания выравнивания
>>(alignment и padding)? Нет ли какого-нибудь примера или статьи?
>>Спасибо.
>
>
>Компилятор можно заставить отказацца от алаймента (-fno-pack) но делать этого крайне не
>советую, ибо большинство системных либ может встать раком. Гораздо правильнее выровнять
>свои структуры по ширине шины (т.е. для IA32 размер структуры должен
>быть кратен 4м байтам), сделать это можно добавлением  неиспользуемых данных,
>к примеру в 18-байтную структуру (обрати внимание, что ее sizeof=20) добавить
>поле char unused[2]

Вы хотите сказать, что если sizeof(structure) кратно 4, то достаточно считать из файла sizeof(structure) байт и записать их последовательно по адресу *structure и данные подхватяться. Я правильно понял?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Запись/чтение двоичных файлов"
Сообщение от SalieFF emailИскать по авторуВ закладки on 08-Мрт-04, 03:34  (MSK)
>>>А как заставить компилятор использовать одинаковые понимания выравнивания
>>>(alignment и padding)? Нет ли какого-нибудь примера или статьи?
>>>Спасибо.
>>
>>
>>Компилятор можно заставить отказацца от алаймента (-fno-pack) но делать этого крайне не
>>советую, ибо большинство системных либ может встать раком. Гораздо правильнее выровнять
>>свои структуры по ширине шины (т.е. для IA32 размер структуры должен
>>быть кратен 4м байтам), сделать это можно добавлением  неиспользуемых данных,
>>к примеру в 18-байтную структуру (обрати внимание, что ее sizeof=20) добавить
>>поле char unused[2]
>
>Вы хотите сказать, что если sizeof(structure) кратно 4, то достаточно считать из
>файла sizeof(structure) байт и записать их последовательно по адресу *structure и
>данные подхватяться. Я правильно понял?


Ну есстессно если это простая структура (к примеру в ней нету указателей, под которые выделяюцца произвольные объемы данных, или даже не произвольные и все в том роде)
Ну а так конечно все просто

struct my_str a, b;
write(file, &a, sizeof(a));
read(file, &b, sizeof(b));

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Запись/чтение двоичных файлов"
Сообщение от ghost emailИскать по авторуВ закладки on 09-Мрт-04, 10:54  (MSK)
>Ну есстессно если это простая структура (к примеру в ней нету указателей,
>под которые выделяюцца произвольные объемы данных, или даже не произвольные и
>все в том роде)
>Ну а так конечно все просто
>
>struct my_str a, b;
>write(file, &a, sizeof(a));
>read(file, &b, sizeof(b));

Спасибо большое!!!

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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