Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sp.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
215.95 Кб
Скачать
  1. Служебные структуры fat и их использование

Существует три вида файловых структур

1) Careful-write file systems – файловые системы, в которых для поддержания целостности запись на диск происходит немедленно при появлении запроса на запись. Пример FAT в MS DOS.

2) Lazy-write file systems – файловые системы, в которых для повышения производительности производится кэширование данных. В случае краха системы данные в кэш могут быть потеряны, а целостность файловой структуры нарушена. Примеры: FAT в Windows 9x и Windows NT, большинство структур в UNIX.

3) Recoverable file systems – файловые системы, которые наряду с кэшированием, повышающим производительность, применяют специальные средства поддержания целостности данных и способны к самовосстановлению после краха системы. К таким системам относятся некоторые файловые системы UNIX, NTFS.

Каждая операция, изменяющая содержимое тома NTFS, рассматривается как транзакция и может быть разбита на последовательность элементарных действий. Когда производится операция изменения содержимого любого файла, в файл протокола (Log file) заносится следующая информация:

– каким образом можно повторить транзакцию (redo);

– каким образом можно отменить транзакцию (undo)

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

  1. Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) – dos, Windows Функции общего назначения

Интерфейс файловой подсистемы низшего уровня предоставляет функция DeviceIoControl(), которая позволяет обращаться напрямую к драйверу устройства и выполнять большое количество действий: форматирование, извлечение съемного носителя, разбивка диска на разделы и т.д. Фактически большинство остальных функций можно рассматривать как сложную надстройку над DeviceIoControl().

Для получения информации об установленных в системе логических дисков (разделов) служит функция: DWORD GetLogicalDrives(void). Каждый установленный бит возвращаемого значения (начиная с младшего) соответствует существующему в системе логическому устройству. Например, если в системе существуют диски A:, C: и D:, то возвращаемое функцией значение равно 0x0000000d.

Функция DWORD GetLogicalDrivesStrings(DWORD dwBufLen, LPTSTR lpBuffer) заполняет указанный буфер информацией о корневом каталоге каждого логического диска в системе. Так, для приведенного выше примера в буфер будет записано: "A:\0C:\0D:\0\0". Параметр dwBufLen определяет длину буфера. Функция возвращает реальную длину буфера, необходимую для размещения всей информации, независимо от результативности текущего вызова. Этим можно воспользоваться, чтобы выделить буфер необходимой длины (как правило, заранее она неизвестна):

DWORD dw = GetLogicalDrivesStrings(0,NULL);

LPSTR lpDriveStrings =

HeapAlloc(GetProcessHeap(),0,dw*sizeof(TCHAR));

GetLogicalDrivesStrings(dw,lpDriveStrings);

Дляопределениятипадискапредназначенафункция UINT GetDriveType(LPTSTR lpRootPathName). В качестве параметра ей передается символическое имя корневого каталога, например, A:\, а возвращаемое значение может быть одно из следующих: 0 (тип не определен), 1 (корневой каталог не существует), DRIVE_REMOVABLE (гибкий), DRIVE_FIXED, DRIVE_REMOTE (сетевой), DRIVE_CDROM, DRIVE_RAMDISK.

Для получения подробной информации о носителе используется функция GetVolumeInformation. Она заполняет параметры информацией об имени тома, названии файловой структуры, максимальной длине имени файла, дополнительных атрибутах тома, специфических для файловой структуры.

Функция GetDiskFreeSpace() сообщает информацию о размерах сектора и кластера и о наличии свободных кластеров.

GetCurrentDirectory(), GetSystemtDirectory(), GetWindowstDirectory() – полу­чение заданного директория (текущего, системного, основного системного).

SetCurrentDirectory() – установка текущего директория.

CreateDirectory(), RemoveDirectory() – создание и удаление директория.

CopyFile(), MoveFile(), MoveFileEx(), DeleteFile() – копирование, перемещение и удаление файла (MoveFileEx() отличается дополнительными флагами: перенос на другой логический диск, замещение существующего и т.д., в т.ч. задержка исполнения до перезагрузки системы).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]