|
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
|
|||||||||||
Создать модель файловой системы на основе связанных списков24.10.2011, 22:58. Показов 6071. Ответов 9
Метки нет (Все метки)
доброго времени суток, форумчане!!! В сентябре получил задание на курсовой проект по СПО:
"Файловая система использующая связанные списки для размещения файлов и связанный список для хранения информации о свободных блоках". Вот особенности задания: Модель должна использовать некий файл в качестве виртуального жёсткого диска с виртуальной файловой структурой, аналогичной файловой структуре реального жёсткого диска. На этом виртуальном жёстком диске создаются "файлы" и "папки" в структуре файловой системы. Также должны быть реализованы основные операции реальной файловой системы. Основные операции я реализовал:
если есть ошибки, то исправьте пожалуйста)) Как связать размещение файлов со списком, создать файл-виртуальный жесткий диск???
0
|
|||||||||||
| 24.10.2011, 22:58 | |
|
Ответы с готовыми решениями:
9
Создать модель файловой системы Имитация иерархической файловой системы на основе дерева Как создать отчет excel на основе связанных таблиц? |
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||
| 25.10.2011, 05:56 | ||||||||
1
|
||||||||
|
4 / 4 / 1
Регистрация: 19.10.2011
Сообщений: 20
|
||
| 25.10.2011, 10:35 | ||
|
где в файловой системе хранить список свободных блоков, что для Вас "блок" вообще, и т.д.
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||||||||||||||||
| 26.10.2011, 22:45 | ||||||||||||||||
|
Ну, короче как бы сделал я. Раз надо сязный список, то представим виртуальный диск VD и допустим в нём папка X а в ней несколько папок papka_1 papka_2 papka_3 и два файла fail_1 fail_2
Тогда содержание папки VD\X и есть тот самый двусвязный список papka_1-> papka_2-> papka_3-> fail_1-> fail_2 Сделать его легко и добавлять туда элементы очень легко. Сам бы я список не стал реализовывать, а взял готовый шаблон из библиотеки STL. Там по-моему несколько функций надо пустяковых написать (чуть ли не одну-две). Функцию сравнения. Это так: каждый элемент это элемент типа FDat. Но, как правильно было замечено, тут нет индикатора того, папка это или файл. Поэтому введём туда новое поле
по полю papka_ili_fail Всё, создаёшь новый элемент и спокойно вставляешь в список и он вставляется. Обрати внимание, впереди будут папки, позади файлы. Но папки вперемежку друг с другом и файлы тоже. Если хочешь упорядочит их по алфавиту, надо будет сортировать не только по полю papka_ili_fail, но и по имени. Но это детали. С содержанием отдельно взятой папки мы разобрались. Но каждая папка как бы содержит в себе другие файлы и папки. То есть надо в переменной FDat создать указатель на "внутренее содержание". Причём, если это папка, то пусть он куда-то реально указывает, а если файл- то никуда (файл не может в себе содержать другие файлы)
papka_2-> papka_0-> fail_34 Причём обрати внимание papka_0 и fail_34 лежат в папке papka_2 Ну вот так примерно. Ещё: поскольку бывают пустые папки, то тогда тоже надо подумать, куда пусть указывают их указатели. Но это детали реализации уже. И ещё: каждый файл в этом виртуальном диске будет иметь какое-то настоящее имя C:\бля-бля-бля\рабочий стол\проект\виртуальный_диск И ВСЁ В ТАКОМ ДуХЕ Вот наверное надо в структуре FDat предусмотреть string, содержащий РЕАЛЬНОЕ ИМЯ ФАЙЛА Задание интересное, сам бы взялся, да некогда. Блин, если это такие курсовые, это вселяет в меня слабую наждежду на меня. Добавлено через 16 часов 39 минут Теперь: решил поправить твой код, но по-моему там много ошибок. НАчасть с первой. Итак, пошли на добавление записи:
Как я тебя убедил, надеюсь, виртуальный диск это всего-навсего файл с кучей таких вот переменных типа FDat. Вот мы насоздавали таких переменых в этом файли и вышли. Из программы А потом снова решили чё-то добавить в этот виртуальный диск. Запускаем программу и получается херь. С одной стороны, нам надо задействоват файл-вртуальный диск, дабы кудато пихать новую запись, с другой- Begin снова равна 0, то есть вроде как диск пуст. Нет так не пойдёт. Позаботься о создании файла "виртуальный диск", чтобы каждый раз прога считывала оттуда даные и решала, пуст диск или нет, ориентируясь на этотфайл, а не на Begin, которая будет всякий раз при входе в прогу, показывать, что диск пуст. Добавлено через 2 часа 36 минут Теперь такое соображение Представим себе работу с виртуальным диском. В оперативной памяти у нас есть куча переменых типа FDat, разбросанных по памяти и незримо связанных меж собой. Как мы договорились, всё это благолепие благополучно сохраняется в файле VD при закрытии программы. Чем связаны меж собой эти переменные находясь в оперативной памяти? Адресами. То есть по этим связям мы их находим. И эти адреса сохраняются в файле VD. По новому запуску программы вся эта херь снова проецируется в память и всё круто, адреса сохранены, связи восстановлены. Круто, да не совсем. Ибо, хе-хе, кмпилятор поместит всю эту херь туда, куда поместит, совсем ПО ДРУГИМ АДРЕСАМ, нежели сохранённые. И все наши связи насмарку. Допустим, адрес который в какой-нибудь папке X находится, указывает на другую папку Y. И он равен cafebabe. А в следующий раз ось помещает папку Y (не папку, конечно, но соответствующую ей запись по адресу babecafe). Чё делать? Я вижу два пути 1) Каждая переменная пусть имеет плюсом два дополнительных поля- свой уникальный идентификатор и уникальный идентификатор то переменной, на которую она указывает. Тупо пронумеровать их и получится, что переменная 1 указывает на переменную 4, та указывает напеременную 6, та указывает на переменную 8. Эти номера сохраняются в файле VD, а при новом запуске программы все адеса восстанавливаются по этим вот данным и по одному единственному адресу который нам действительно необходимо знать: по адресу начала каталога. ...Кстати, каждый файл и так будет иметь уникальный дентификатор- собственное реальное имя на диске С. Этим можно воспользоваться, но тогда каждая переменная будет слишком большой- вместо номера своей "соседки" на этом месте будет её реально имя. Так, если папка 2 указывает на папку с номеро 6, то вместо номера 6 будет имя. Это не наш метод 2) второй способ основан на том, что данный из файла VD можно проецровать в непрерывную область памяти. Допустим, мы работаем с нашим диском и переменные находятся по адресам 10, 14, 18, 22 и так далее (через 4 байт, или через сколько там, важно, что через равное количество байтов) Запоминаем адрес родительского каталога 10 закрываем-окрываем программу Видим, что корневой каталог лежит по адресу 23! Как мы найдё адреса осальных? Правильно, 25, 26 и 28. Распихиваем эти данные по нужным полям и можно работать с диском. Чем мне не нравится такой способ- при добавлении записи её придётся добавлять в конец массива переменных типа DFat. И всё бы ничего, но если там не окажется места? А тогда придётся работать с alloc функциями. Можно, но мне этот способ не нравится. Добавлено через 1 минуту Ой, вру 27, 31 и 35
1
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
|
|
| 03.11.2011, 03:19 [ТС] | |
|
Мне преподаватель сказал, что виртуальная файловая система должна представлять собой бинарный файл размером 20 мб. Так это что, если он будет использоваться как жесткий диск, то все операции сохранения и считывания данных сводятся к операциями над текстовым файлом? Тогда, например, как будет храниться структура? Я решил, что размером одного блока будет размер структуры с описанием файла и тогда я буду определять размер файла в блоках, ну а потом и в байтах. Вопрос в том, как это всё туда правильно записать, ну и потом считывать и манипулировать этим? Насколько я понимаю, функция malloc не выделяет память из файла, а значит, чтобы задать файлу размер нужно определённый участок бинарного файла заполнить какими-то символами. Должен сказать, что в меня это вселило слабую надежду на полноценное выполнение курсового проекта, так что, коллеги, если у кого есть идеи по поводу реализации вышеизложенного мной, просьба приподнести в коде. Благодарю за поддержку
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||||
| 03.11.2011, 06:49 | ||||
|
Во-вторых, начинать надо с азов. В-третьих, ничё сверхъестественного, я уже пишу такую файловую систему, реализовал две операции: 1) создание файловой системы. Это делавется так: (в моём случае): допустим, файловая система имеет имя vF. Тогда создаётся папка vF, в ней файл vF, а в него записывается данные об этой файловой системе? а именно такие данные: В каждой файловой системе существует сначала только одна папка. Вот создаётся структура (как у тебя), соответствующая этой одной папке и записывается в этот файл Всё, файловая система создана. 2) создание папки Но поскольку я не знаю требований, пишу на свой страх и риск, списки реализовал с помощью STL
А этот диск типа оглавления. Если ты добавил файл- туда занесутся даные. Если ты удалил файл- оттуда удалятся данные. Это основное Если ты изменишь атрибуты файла- то это отразится в этотм файле-оглавлении, но это уже по желанию. Короче в этом файле данные О ФАЙЛАХ. Пыталя объяснить понятно.
0
|
||||
| 03.11.2011, 08:31 | |
|
0
|
|
|
4 / 4 / 1
Регистрация: 19.10.2011
Сообщений: 20
|
|
| 03.11.2011, 09:37 | |
|
поддерживаю идею разбиения исходного файла вфс(виртуальной файловой системы) на блоки. и вроде как в Вашем задании не было ничего об интеграции Вашей вфс с операционкой, в которой это будет запускаться.
итак, разбиваем файл вфс на блоки равного размера. каждый файл внутри вфс - это один и более блоков, которые связаны мужду собой полем в структуре одного блока = смещению в вфс от начала файла/от первого блока/от предыдущего блока. структура одного блока определяется полями типа имя файла, предок(id папки в которой он лежит), свой id, флаги(в том числе файл это или папка)..., и int полем определяющем где лежит следующий блок(если есть), ну и данные (например в виде char * ). папка в вфс - это файл, содержимым которого является список id файлов которые лежат в этой папке; список пустых блоков - это файл, содержимым которого является список например номеров свободных блоков в вфс; и первые два блока пусть будут жестко оптеделены под корневой каталог в вфс и под файл списка пустых блоков. надеюсь, понятно описал идеологию... рассматривайте как вариант возможной структуры вфс...
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||||||
| 03.11.2011, 15:10 | ||||||
|
Мой вариант:
реализовал: создание вфс, создание папки
1
|
||||||
| 03.11.2011, 15:10 | |
|
Помогаю со студенческими работами здесь
10
Создать физическую модель Бд на основе логической
создать модель функционирования системы, С++ Нужно создать движущуюся модель солнечной системы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|