Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уточнение задания v2.1.docx
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
36.2 Кб
Скачать

Некоторые моменты

  • Подпрограммы нужно реализовать в виде методов данного класса FS.

  • Наш руководитель (да продлятся его годы) требует, чтобы в процессе работы подпрограмм перехватывались всевозможные ошибки. Ошибки, которые можно предвидеть- отсутствие файла с заданным именем в ФС, недостаток памяти и т.д. могут быть обработаны штатно- подпрограмма обнаруживает наличие такой исключительной ситуации и возвращает соответствующий код ошибки. Остальные ошибки, которые могут возникнуть в подпрограмме из-за невнимательности и кривых рук (деление на ноль, выход за пределы массива и т.д.) могут быть перехвачены с помощью блоков try{}, catch{}. Вот пример:

#include <iostream>

using namespace std;

void main()

{

try

{

int i = 10;

int j = 0;

int k = i/j; //Error on this line.

}

catch(...)

{

cout<<"aaaaaaa";

}

cin.get();

}

Т.е. весь текст подпрограммы можно заключить в блок try, а в блоке catch написать

return 1;(код ошибки).

  • В некоторых подпрограммах требуется выводить на экран сообщение(оглавление, информацию о свободном пространстве). Напрямую пользоваться cin нельзя. В подпрограмму в качестве параметра будет передаваться адрес переменной &screen типа stringstream, выводить информацию нужно будет в неё:

screen<<"xyz";

Описание подпрограмм

Описание подпрограмм практически не изменилось(разве что не нужно забивать единичками занятые области на диске). Изменились списки параметров и возвращаемые коды.

  1. Создать файловую систему с заданными параметрами (форматировать диск)

Процедура получает следующие аргументы:

Размер системы(в блоках)

Метка тома

Владелец

Процедура должна создать объект класса FSфайл, в системном блоке записать метку тома, владельца, версию системы(1.0?), название системы, разметить нужное количество сегментов каталога- записать в них содержимое заголовков, в первом сегменте добавить запись о всем свободном пространстве и признак конца записей, в остальных сегментах- признаки конца записей.

Размер сегмента-1024 байта, размер записи о файле- 16 байт, учитывая, что в сегменте есть заголовок, получим что сегмент описывает 62файла(1 запись-признак конца записей в сегменте). Файл занимает, как минимум, 1 блок, значит количество сегментов в каталоге- это (количество свободных блоков в системе)\62+1.

Процедура должна вернуть код завершения:

0-успешное завершение

1-непредвиденная ошибка

  1. Вывести оглавление как оно есть

Получаемый параметр- адрес указателя на переменную – буфер информации.

Процедура должна пройти по каталогу (по всем задействованным сегментам), просмотреть все записи до признака конца записей и вывести в поток названия, типы и размер всех файлов.

Процедура должна вернуть код завершения:

0-успешное завершение

1-непредвиденная ошибка

  1. Вывести оглавление в алфавитном порядке

То же, что и в предыдущей процедуре, только файлы сортируются по имени в алфавитном порядке.

  1. Вывести информацию о пустом месте на диске и его характеристиках

То же самое, что и выше, только нужно найти в каталоге записи о пустых областях и вывести в поток их общее количество и размеры каждой.

  1. Создать файл

Процедура получает следующие параметры:

Имя файла

Тип файла

Размер

Процедура должна пройти по каталогу файлов и найти запись о свободной области с размером больше либо равным размеру записываемого файла. На её место добавляется запись о созданном файле, все последующие записи сдвигаются на одну позицию вниз и на освободившееся место (после созданной записи о файле) добавляется запись о свободной области с размером, равным разнице размеров записанного файла и исходной свободной области. Если при сдвиге записей окажется, что сегмент заполнен записями(признак конца записей попал на 63-ю позицию), то нужно перейти на следующий сегмент, при этом в заголовках всех сегментов нужно увеличить счетчик задействованных сегментов. Может сложиться ситуация, что все имеющиеся сегменты полностью заполнены записями. В этом случае процедура должна вернуть код ошибки. Также может оказаться, что в системе недостаточно памяти для записи файла, при этом тоже должен возвращаться код ошибки.

Перед записью файла неплохо было бы пробежаться по всему каталогу и проверить, что файла с таким именем и типом не существует.

Процедура возвращает следующие коды:

0-успешное завершение

1-непредвиденная ошибка

2-недостаточно места в системе

3-недостаточно места в каталоге

4-такой файл уже существует