Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Потихоньку изучаю C, если точнее - стандарт ISO/IEC 9899:1990. Когда я ранее писал код на C#, то особо не задумывался о том, как сохранять в файлах состояния различных объектов (сериализация всё делала за меня), а вот в C... Я понимаю, как сохранить в файл массивы структур, содержащих в себе поля базовых типов (int, char, double и т.п.), и как прочитать их обратно, однако в более сложной ситуации возникает заминка... Как правильно сохранять в файл структуры данных, связанных друг с другом посредством указателей, чтобы затем можно было бы прочитать данные обратно из файла, корректно восстановив все связи? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 20:14 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Compositum(сериализация всё делала за меня) А сериализацию ты считаешь какой-то уму непостижимой магией? Нет в ней ничего, что нельзя написать за пару часов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 20:20 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Сообщения по теме приветствуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 20:27 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
CompositumКак правильно сохранять в файл структуры данных, связанных друг с другом посредством указателей, чтобы затем можно было бы прочитать данные обратно из файла, корректно восстановив все связи? Написать функции сериализации и десериализации. Такое сообщение ты считаешь "по теме"? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 20:31 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Предположим, нужно в двоичном файле хранить некоторое двоичное дерево и пару списков (односвязный и двусвязный), без всяких СУБД. Кто как реализовал бы это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 21:29 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
А что не понятно? Давай нарисуй структуру, а мы напишем специализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 21:31 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
MasterZivА что не понятно? Непонятно, как записать в файл данные так, чтобы при чтении файла можно было корректно восстановить связи, реализованные в структурах посредством указателей. Ок, простой пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. MasterZiv Давай нарисуй структуру, а мы напишем специализацию. Как ты сохранишь в файл двусвязный список из элементов указанной мною структуры и как потом обратно прочтёшь его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 21:39 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Compositum, в этом случае список можно сериализовать как обычный линейный массив. Если связи посложнее, или там какое-то сложное отношение, в качестве заменителя адреса всегда можно использовать позицию внутри файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 21:59 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
CompositumКак ты сохранишь в файл двусвязный список из элементов указанной мною структуры и как потом обратно прочтёшь его? В чём проблема-то? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 22:07 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
MozokCompositum, в этом случае список можно сериализовать как обычный линейный массив. Если связи посложнее, или там какое-то сложное отношение, в качестве заменителя адреса всегда можно использовать позицию внутри файла. Согласен, список можно сохранить массивом... Пусть вместо списка будет двоичное дерево. Я попробую воспользоваться индексом, а в общепринятой практике как решается подобное, индексами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 22:11 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Compositumа в общепринятой практике как решается подобное, индексами? Главное средство - мозг, остальное - так, инструменты. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 22:13 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
@Dimitry Sibiryakov Спасибо за код, я как-то не подумал, что можно в файл не сохранять информацию из указателей (в этом затык был). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 22:22 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Compositum, Можно еще поменять структуры так, чтобы в них использовались не указатели, а например индексы в масиве или смещения относительно начала структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 22:30 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
vromanovCompositum, Можно еще поменять структуры так, чтобы в них использовались не указатели, а например индексы в масиве или смещения относительно начала структуры. В смысле? Предлагаете при записи в файл преобразовывать двоичное дерево в линейный список? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 22:33 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Compositum@Dimitry Sibiryakov Спасибо за код, я как-то не подумал, что можно в файл не сохранять информацию из указателей (в этом затык был).Делать это конечно можно, но бессмысленно. Указатели на то и придуманы чтобы данные в памяти могли находиться в разных местах памяти. У тебя затык на самом деле в другом, ты не понимаешь структуры данных. Список (не важно одно- или дву-связный) это всего-лишь одномерный массив у которого элементы разбросаны по памяти в случайном порядке. Если ты поймешь это, то поймешь и то что при сериализации списка достаточно записывать на диск обычный индексированный массив, выкидывая при этом указатели нафиг. А при десериализации превращать этот индексированный массив обратно в список. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 23:09 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
CompositumВ смысле? Предлагаете при записи в файл преобразовывать двоичное дерево в линейный список? Элементы двоичного дерева размещать в массиве. Вместо ссылок - индекс элемента. Запись будет производится просто одним вызовом. Или можно будет использовать сразу memory mapped file. Вообще обычное дерево и запись на диск плохо совместимы. Лучше уж хотябы b-tree ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 23:23 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
CompositumПотихоньку изучаю C, если точнее - стандарт ISO/IEC 9899:1990. Когда я ранее писал код на C#, то особо не задумывался о том, как сохранять в файлах состояния различных объектов (сериализация всё делала за меня), а вот в C... Я понимаю, как сохранить в файл массивы структур, содержащих в себе поля базовых типов (int, char, double и т.п.), и как прочитать их обратно, однако в более сложной ситуации возникает заминка... Как правильно сохранять в файл структуры данных, связанных друг с другом посредством указателей, чтобы затем можно было бы прочитать данные обратно из файла, корректно восстановив все связи? Если у тебя есть дерево то навреняка есть итератор. Можно обойти все элементы и сохранить их сериализуемую часть т.к. контент на диск абсолютно в любом формате. Можно даже в xml или txt. Важно чтобы при восстановлении объекта дерева с диска весь контент лёг обрано в соотвествии в правильным алгоритмом построения. Тоже самое со списками. Если есть связи похожие на агрегацию то можно сооттв. сохранять объекты в порядке обхода дочерних объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 23:59 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
vromanovCompositumВ смысле? Предлагаете при записи в файл преобразовывать двоичное дерево в линейный список? Элементы двоичного дерева размещать в массиве. Вместо ссылок - индекс элемента. Запись будет производится просто одним вызовом. Или можно будет использовать сразу memory mapped file. Здесь верно. vromanovВообще обычное дерево и запись на диск плохо совместимы. Лучше уж хотябы b-treeА здесь - глупости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 01:17 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
[quot White Owl]vromanovvromanovВообще обычное дерево и запись на диск плохо совместимы. Лучше уж хотябы b-treeА здесь - глупости. Речь идет о том, если файл перидется иногда обновлять блоками. Именно так стоятся индексы баз данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 08:05 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
vromanovРечь идет о том, если файл перидется иногда обновлять блоками. Именно так стоятся индексы баз данных А этим пусть OS занимается. Делаем mmap на файл и дальше работаем просто с памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 10:02 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
InkelyadvromanovРечь идет о том, если файл перидется иногда обновлять блоками. Именно так стоятся индексы баз данных А этим пусть OS занимается. Делаем mmap на файл и дальше работаем просто с памятью. b-tree специально оптимизирован, чтобы минимально дергать диск. Это позволяет эффективно использовать b-tree для деревьев напрямую отображаемых с диска в ОЗУ. Чего не скажешь про деревья вообще, где соседние узлы в дереве могут располагаться в памяти на значительном удалении друг от друга Но при сериализации это не имеет значения, т.к. тут практически всегда на диск записывается в другом формате чем в ОЗУ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 10:22 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Compositum, В свое время разбирал PDF-формат. Товарищи из Adobe поступают следующим образом: в конце файла нвходится список всех объектов с элементами вида Номер-Смещение внутри файла. Соответственно, при необходимости сослаться на другой объект, указывается его номер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 11:37 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovCompositumКак ты сохранишь в файл двусвязный список из элементов указанной мною структуры и как потом обратно прочтёшь его? В чём проблема-то? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. А если элементов будет под десятки миллионов, из-за рекурсии стэк не переполнится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:51 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
насколько я понял, человек спрашивает про циклические ссылки но надо ли изобретать велосипед? Неужели в плюсах нету нормальной либы, которая бы это умела? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 13:19 |
|
||
|
Как в C правильно сохранять в файл и читать структуры данных, связанных указателями?
|
|||
|---|---|---|---|
|
#18+
chabapokнасколько я понял, человек спрашивает про циклические ссылки но надо ли изобретать велосипед? Неужели в плюсах нету нормальной либы, которая бы это умела?Как ты себе представляешь такую либу? Вот есть у тебя некий самодельный класс - как эта предполагаемая либа сможет узнать какой из элементов класса надо сохранять на диск, а какой из элементов является ссылкой на другой элемент? Учти еще что эти все элементы могут быть объявлены приватными... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2013, 18:22 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38213682&tid=2020307]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 184ms |

| 0 / 0 |
