2013-11-14 4 views
0

Мне нужно сделать это с помощью C++ Мне нужно создать файловую систему. При инициализации файловой системы должен быть инициализирован файл размером 10 МБ. файл следует разделить на 3 части. Первая часть (1 МБ) файла «File_system» должна быть зарезервирована для имен файлов и начального адреса данных в файле. Он должен быть подразделен на подблоки, каждый из которых может быть 500B. Другими словами, каждый дополнительный блок в первом блоке (1 МБ) файла должен иметь возможность хранить имя файла и начальный адрес, который не должен превышать 500B. Вторая часть (1 МБ) вашего файла «File_system» для перечисления доступных пустых блоков в третьей части.
Третья часть (8 МБ) вашего файла «File_system» для данных, которые должны быть записаны в файлах, перечисленных в первой части. Я знаю обработку файлов, список ссылок, деревья, классы. У меня нет никакой подсказки, как дать начало. Как выделить пространство в текстовом файле.файловая система с C++

+0

как бы вы это сделали, если бы у вас были все в памяти? –

+0

точно я не знаю, как создать текстовый файл размером 10 МБ и hw, чтобы разделить его. Его в памяти:/ – Renee

+1

Ну, вы, конечно же, хотите использовать двоичный файл, а не текстовый файл. Чтобы создать файл, напишите ему 10 Мбайт данных, возможно, все нули. Разделение не является частью файла, а ваша логика для его манипулирования. –

ответ

0

Обычно вы делаете это, определяя некоторые структуры для представления данных для каждой части. Например, ваша первая часть (500 байт) структура будет что-то вроде этого:

#pragma pack(push, 1) // or equivalent 
struct directory_entry { 
    long starting_address; 
    char file_name[500-sizeof(long); 
}; 
#pragma pack(pop) 

Для файла, вы будете хотеть массив тех, кто занимает 1 мегабайт.

Вторая часть, вероятно, проще всего настроить как растровое изображение. Определите размер блока, который нужно использовать для самого хранилища. Для простоты, скажем, 1 килобайт. Таким образом, вы будете обрабатывать 8 МБ третьей части как массив из блоков 1 КБ. Вторая часть будет иметь один бит, посвященный каждому блоку 1 КБ. Это будет 0, если этот блок свободен, и 1, если этот блок используется.

Вы можете инициализировать его, установив все в 0-байты. Затем, чтобы создать файл, вы сканируете часть записи каталога, пока не найдете запись с ее начальным_датчиком, все еще установленным на 0. Затем вы просмотрите растровое изображение во второй части, чтобы найти некоторое пространство, которое вы можете использовать. Вы установите бит для этого пространства равным 1 и установите start_address в записи каталога на адрес, соответствующий найденному вами блоку, который не используется.

Чтобы поддерживать несколько блоков в файле, вы могли бы (на одном примере) посвятить последние 4 байта каждого блока адресу следующего блока, который составляет этот файл (и какое-то другое невозможное значение, означающее конец файл). Это не самый эффективный способ сделать что-то для большинства целей, но, вероятно, этого достаточно для задачи.

Конечно, есть много альтернатив каждому из них. То, что я изложил, - это действительно простой, но, если честно, довольно неэффективный тип файловой системы, смутно похожий на то, что вы, возможно, видели на на самом деле компьютер с низким начальником 30 лет назад - но только для очевидного Например, даже файловая система MS-DOS FAT была более сложной.

Смежные вопросы