Скачать 197.45 Kb.
|
Лабораторная работа № 7. Файловая система
GetDriveType Функция GetDriveType возвращает тип диска (removable, fixed, CD-ROM, RAM disk, или network drive). UINT GetDriveType(LPCTSTR lpRootPathName); Параметры: lpRootPathName [in] Указатель на не нулевую стоку в которой хранится имя главной директории на диске. Обратный слэш должен присутствовать! Если lpRootPathName равно NULL, то функция использует текущую директорию. Возвращаемое значение: Функция возвращает тип диска. Могут быть следующие значения: Значение Описание DRIVE_UNKNOWN Не известный тип. DRIVE_NO_ROOT_DIR Не правильный путь. DRIVE_REMOVABLE Съёмный диск. DRIVE_FIXED Фиксированный диск. DRIVE_REMOTE Удалённый или network диск. DRIVE_CDROM CD-ROM диск. DRIVE_RAMDISK RAM диск. Пример: int d; d = GetDriveType( "c:\\" ); if( d == DRIVE_UNKNOWN ) cout << " UNKNOWN" << endl; if( d == DRIVE_NO_ROOT_DIR ) cout << " DRIVE NO ROOT DIR" << endl; if( d == DRIVE_REMOVABLE ) cout << " REMOVABLE" << endl; if( d == DRIVE_FIXED ) cout << " FIXED" << endl; if( d == DRIVE_REMOTE ) cout << " REMOTE" << endl; if( d == DRIVE_CDROM ) cout << " CDROM" << endl; if( d == DRIVE_RAMDISK ) cout << " RAMDISK" << endl; ^ Одним из наиболее интересных параметров логического устройства является размер свободного пространства на нем. Этот параметр вместе с некоторыми другими вы можете определить при помощи функции GetDiskFreeSpace XE "GetDiskFreeSpace" : BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName, // адрес пути к корневому каталогу LPDWORD lpSectorsPerCluster,// количество секторов в кластере LPDWORD lpBytesPerSector, // количество байт в секторе LPDWORD lpNumberOfFreeClusters, // количество свободных // кластеров LPDWORD lpTotalNumberOfClusters); // общее количество // кластеров Перед вызовом этой функции вы должны подготовить несколько переменных типа DWORD и передать функции их адреса. Функция GetDiskFreeSpace запишет в эти переменные параметры логического диска, перечисленные в комментариях к прототипу функции. Для того чтобы определить размер свободного пространства на диске в байтах, вы должны умножить значение количества свободных кластеров (записанное по адресу lpNumberOfFreeClusters) на количество секторов в кластере (записанное по адресу lpSectorsPerCluster) и на количество байт в одном секторе (которое будет записано по адресу lpBytesPerSector). Более подробно о делении диска на кластеры и секторы вы можете узнать из 19 тома “Библиотеки системного программиста”. В программном интерфейсе Microsoft Windows NT есть еще одна функция, с помощью которой вы можете определить параметры дискового устройства. Это функция GetVolumeInformation XE "GetVolumeInformation" : BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // адрес пути к корневому каталогу LPTSTR lpVolumeNameBuffer, // буфер для имени тома DWORD nVolumeNameSize, // размер буфера lpVolumeNameBuffer LPDWORD lpVolumeSerialNumber, // буфер для серийного номера // тома LPDWORD lpMaximumComponentLength, // буфер для максимальной // длины имени файла, допустимой для данного тома LPDWORD lpFileSystemFlags, // буфер для системных флагов LPTSTR lpFileSystemNameBuffer, // буфер для имени // файловой системы DWORD nFileSystemNameSize); // размер буфера // lpFileSystemNameBuffer Перед использованием этой функции вы должны подготовить несколько буферов и передать функции их адреса. Функция заполнит буферы параметрами устройства, корневой каталог которого задан параметром lpRootPathName. В буфере системных флагов, адрес которого передается функции через параметр lpFileSystemFlags, могут быть установлены следующие флаги:
^ 1.3.2. Файловые системыВсе современные ОС обеспечивают создание файловой системы, которая предназначена для хранения данных на дисках и обеспечения доступа к ним. Основные функции файловой системы можно разделить на две группы: Функции для работы с файлами (создание, удаление, переименование файлов и т.д.) Функции для работы с данными, которые хранятся в файлах (запись, чтение, поиск данных и т.д.) Известно, что файлы используются для организации и хранения данных на машинных носителях. Файл – это последовательность произвольного числа байтов, обладающая уникальным собственным именем или поименованная область на машинных носителях. Структурирование множества файлов на машинных носителях осуществляется с помощью каталогов, в которых хранятся атрибуты (параметры и реквизиты) файлов. Каталог может включать множество подкаталогов, в результате чего на дисках образуются разветвленные файловые структуры.Организация файлов в виде древовидной структуры называется файловой системой. Принцип организации файловой системы – табличный. Данные о том, в каком месте на диске записан файл, хранится в таблице размещения файлов (File Allocation Table, FAT). Эта таблица размещается в начале тома. В целях защиты тома на нем хранятся две копии FAT. В случае повреждения первой копии FAT дисковые утилиты могут воспользоваться второй копией для восстановления тома. По принципу построения FAT похожа на оглавление книги, так как операционная система использует ее для поиска файла и определения кластеров, которые этот файл занимает на жестком диске. Наименьшей физической единицей хранения данных является сектор. Размер сектора 512 байт. Поскольку размер FAT – таблицы ограничен, то для дисков, размер которых превышает 32 Мбайт, обеспечить адресацию к каждому отдельному сектору не представляется возможным. В связи с этим группы секторов условно объединяются в кластеры. Кластер является наименьшей единицей адресации к данным. Размер кластера, в отличие от размера сектора, не фиксирован и зависит от емкости диска. Сначала для дискет и небольших жестких дисков (менее 16 Мбайт) использовалась 12-разрядная версия FAT (так называемая FAT12). Затем в MS-DOS была введена 16-разрядная версия FAT для более крупных дисков. Операционные системы MS DOS, Win 95, Win NT реализуют 16 – разрядные поля в таблицах размещения файлов. Файловая система FAT32 была введена в Windows 95 OSR2 и поддерживается в Windows 98 и Windows 2000. FAT32 представляет собой усовершенствованную версию FAT, предназначенную для использования на томах, объем которых превышает 2 Гбайт. FAT32 обеспечивает поддержку дисков размером до 2 Тбайт и более эффективное расходование дискового пространства. FAT32 использует более мелкие кластеры, что позволяет повысить эффективность использования дискового пространства. В Windows XP применяется FAT32 и NTFS. Более перспективным направлением в развитии файловых систем стал переход к NTFS (New Technology File System – файловая система новой технологии)с длинными именами файлов и надежной системой безопасности. Объем раздела NTFS не ограничен. В NTFS минимизируется объем дискового пространства, теряемый вследствие записи небольших файлов в крупные кластеры. Кроме того, NTFS позволяет экономить место на диске, сжимая сам диск, отдельные папки и файлы. По способам именования файлов различают “короткое” и “длинное” имя. Согласно соглашению, принятому в MS-DOS, способом именования файлов на компьютерах IBM PC было соглашение 8.3., т.е. имя файла состоит из двух частей: собственно имени и расширения имени. На имя файла отводится 8 символов, а на его расширение – 3 символа. Имя от расширения отделяется точкой. Как имя, так и расширение могут включать только алфавитно-цифровые символы латинского алфавита. Имена файлов, записанные в соответствии с соглашением 8.3, считаются “короткими”. С появлением операционной системы Windows 95 было введено понятие “длинного” имени. Такое имя может содержать до 256 символов. Этого вполне достаточно для создания содержательных имен файлов. “Длинное” имя может содержать любые символы, кроме девяти специальных: \ / : * ? “ < > |. В имени разрешается использовать пробелы и несколько точек. Имя файла заканчивается расширением, состоящим из трех символов. Расширение используется для классификации файлов по типу. Уникальность имени файла обеспечивается тем, что полным именем файла считается собственное имя файла вместе с путем доступа к нему. Путь доступа к файлу начинается с имени устройства и включает все имена каталогов (папок), через которые проходит. В качестве разделителя используется символ “\” (обратный слеш - обратная косая черта).Например: D:\Documents and Settings\ТВА\Мои документы\lessons-tva\ robots.txt Несмотря на то, что данные о местоположении файлов хранятся в табличной структуре, пользователю они представляются в виде иерархической структуры – людям так удобнее, а все необходимые преобразования берет на себя операционная система. К функции обслуживания файловой структуры относятся следующие операции, происходящие под управлением операционной системы: создание файлов и присвоение им имен; создание каталогов (папок) и присвоение им имен; переименование файлов и каталогов (папок); копирование и перемещение файлов между дисками компьютера и между каталогами (папками) одного диска; удаление файлов и каталогов (папок); навигация по файловой структуре с целью доступа к заданному файлу, каталогу (папке); управление атрибутами файлов.
Практически весь диск состоит из данных. Область данных разделена на участки одинакового размера - кластеры (от 1 до 64 секторов). Все файлы и папки находятся в этих кластерах. Файл может занимать несколько кластеров, но каждый кластер принадлежит только одному файлу. Кластер либо свободен, либо является частью какой-либо папки или файла. Файл необязательно должен находиться в соседних кластерах. Вполне возможно, что первый его кластер находится в начале диска, второй – в конце, а третий – в середине. Чтобы найти все кластеры файла (или папки, что одно и то же), существует специальная таблица - File Allocation Table (FAT). В ней находятся специальные значения для каждого кластера - занятый файлом, свободный, дефектный. Если кластер занят файлом, то в таблице находится номер следующего кластера файла. Фактически, системы FAT12, FAT16 и FAT32 различаются только размером элемента таблицы FAT – 12 бит (1,5 байта), 16 бит (2 байта) и 32 бита (4 байта). Так как элементы содержат номер кластера, то на диске с FAT12 может быть максимум 2^12 = 4096 кластеров, в FAT16 - 2^16 = 65536, а в FAT32 - 2^32 = 4294967295 кластеров. По сути, таблица FAT не несёт каких-либо полезных для пользователя данных, просто занимая дисковое место - данные из неё используются только системой. Каков же её размер ? Давайте посчитаем. На каждый кластер приходится по одному элементу FAT. В FAT32 они по 4 байта, то есть, если размер кластера 4 килобайта (8 секторов = 4096 байт), то 4/4096 (1 тысячная) всего диска занято под FAT, а если 0,5 килобайта (1 сектор = 512 байт), то занято уже 4/512 (8 тысячных). Получается, чем больше кластер, тем меньший размер диска теряется под таблицу? Да это так, но при увеличении кластера возникают потери, несравнимо большие - о них мы поговорим попозже. На диске также могут присутствовать: системная область (1 - 20 секторов) и несколько копий FAT (чаще всего одна), так что размер FAT нужно умножать на число копий. Wladimir_TS ◊ 05.09.2008, 11:28 Пытаюсь написать библиотеку функций для работыс FAT16 устройствами, на базе разработок Элм Чена, но затык случается при попытке найти на просторах накопителя место расположения каталога с файлами...Может кто подскажет ? Wladimir_TS ◊ 08.09.2008, 05:55 И так - интерисует строго FAT16, задача вычислить адрес (в секторах) начала списка файлов корневого каталога и начало области данных по информации от PBR и MBR. В оригинальном беруться 2 байта начиная со смещения в &0Eh в PBR, умножается на 2 и прибавляется к номеру сектора PBR и еще +1. Но на этом месте обычно одни нули. Например у меня в ячейке &06h а PBR лежит в &20h секторе, итого &C0h, а фактически нужен аддрес &00042000h или сектор &210h SAK ◊ 08.09.2008, 09:18 Ну в общем там всё описано, но от себя добавлю, что не следует надеяться на абсолютные значения принятые как стандартные. Например, число сектров на кластер, по указанной ссылке определяется размером диска, но фактически может быть другим. Правильное значение надо считывать из загрузчика. Все смещения в PBR не абсолютные, а указываются относительно самого PBR. Между FAT12 и FAT16 разница только в размере элемента таблицы FAT. Wladimir_TS: задача вычислить адрес (в секторах) начала списка файлов корневого каталога и начало области данных Из MBR находим начало логического диска и читаем оттуда загрузчик. Далее сектор PBR считается нулевым и все смещения отсчитываются от него. По смещению 0Eh указано количество зарезервированных секторов. По сути это номер сектора начала FAT относительно PBR. Количество секторов в FAT указано по смещению 16h в PBR (2 байта), а количество копий по смещению 10h. Получается что для нахождения корневого каталога надо умножить количество копий FAT (10h) на число секторов в нём (16h) и прибавить к полученному значению число зарезервированных секторов (0Eh). Далее находим размер корневого каталога. По смещению 11h в PBR (2 байта) указано количество записей в корневом каталоге. Размер каждой записи 32 байта, следовательно количество секторов получим делением заначения по смещению 11h на 16. (Если быть совсем правильным, то надо умножить на 32 и разделить на размер сектора (2 байта по смещению 0Bh)). Т.е. смещение области данных найдём прибавляя к вычисленному ранее адресу корневого каталога его размер ({11h}/16). Область данных начинается сразу со второго кластера (первого не существует). Нулевая и первая ячейки таблицы FAT используются для записи идентификатора типа диска.
^ NTFS изжила себя с технической точки зрения. Система ReFS обеспечивает лучшую защиту данных на емких и быстрых жестких дисках.
NTFS изжила себя с технической точки зрения. Система ReFS обеспечивает лучшую защиту данных на емких и быстрых жестких дисках.« Предыдущие 1 элементов Следующий 1 элемент » 123
NTFS изжила себя с технической точки зрения. Система ReFS обеспечивает лучшую защиту данных на емких и быстрых жестких дисках.« Предыдущие 1 элементов Следующий 1 элемент » 123
|
![]() | Для чего создается файловая система? Кто ее создает? Когда? Приведите пример простейшей файловой системы | ![]() | Распределенная файловая система dfs osf предназначена для обеспечения прозрачного доступа к любому файлу, расположенному в любом... |
![]() | Лабораторная работа Простейшие алгоритмы сортировок (сортировка методом пузырька, вставки, выборки) 5 | ![]() | Использование констант делает программы легче читаемыми и позволяет проще вносить изменения: отпадает необходимость многократно исправлять... |
![]() | Тип оборудования; процессор; оперативная память; жесткий диск; файловая система; порты; протоколы; raid; операционная система; система... | ![]() | Элементы окна редактора Excel. Основные понятия, связанные с работой в электронных таблицах Excel |
![]() | Операционная система ms dos. Основные принципы хранения информации на магнитных дисках в ms dos. Файловая система ms dos | ![]() | Создать на языках, представленных в пакете Concept 5 6 XL и отладить программы, реализующие систему автоматического управления горизонтальным... |
![]() | Выполнить обработку матрицы согласно варианту. При написании программы использовать универсальные алгоритмы | ![]() | Знакомство с инсталляцией и основными возможностями программы схемотехнического моделирования электронных схем microcap-7(8) |