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

9. Файлова система ntfs

Розділ NTFS, теоретично, може бути майже якого завгодно розміру. Межа, звичайно, є, але я навіть не буду вказувати його, так як його із запасом вистачить на наступні сто років розвитку обчислювальної техніки - за будь-яких темпах зростання. Як справи з цим справу на практиці? Майже так само. Максимальний розмір розділу NTFS в даний момент обмежений лише розмірами жорстких дисків. NT4, правда, буде відчувати проблеми при спробі установки на розділ, якщо хоч якась його частина відступає більш ніж на 8 Гб від фізичного початку диска, але ця проблема стосується лише завантажувального розділу.

Ліричний відступ. Метод інсталяції NT4.0 на порожній диск досить оригінальний і може навести на неправильні думки про можливості NTFS. Якщо ви вкажете програмі установки, що бажаєте відформатувати диск в NTFS, максимальний розмір, який вона вам запропонує, буде всього 4 Гб. Чому так мало, якщо розмір розділу NTFS насправді практично необмежений? Справа в тому, що установча секція просто не знає цієї файлової системи :) Програма установки форматує цей диск у звичайний FAT, максимальний розмір якого в NT становить 4 Гбайт (з використанням не зовсім стандартного величезного кластеру 64 Кбайта), і на цей FAT встановлює NT. А от уже в процесі першого завантаження самої операційної системи (ще в настановної фазі) проводиться швидке перетворення розділу в NTFS; так що користувач нічого і не помічає, крім дивного "обмеження" на розмір NTFS при установці.:)

Структура розділу - загальний погляд

Як і будь-яка інша система, NTFS ділить все корисне місце на кластери - блоки даних, використовувані одноразово. NTFS підтримує майже будь-які розміри кластерів - від 512 байт до 64 Кбайт, якимсь стандартом ж вважається кластер розміром 4 Кбайт. Ніяких аномалій кластерної структури NTFS не має, тому на цю, загалом-то, досить банальну тему, сказати особливо нічого.

Диск NTFS умовно ділиться на дві частини. Перші 12% диску відводяться під так звану MFT зону - простір, у яке росте метафайл MFT (про це нижче). Запис будь-яких даних в цю область неможлива. MFT-зона завжди тримається порожньою - це робиться для того, щоб найголовніший, службовий файл (MFT) не фрагментирован при своєму зростанні. Решта 88% диску є звичайне простір для зберігання файлів.

Вільне місце диска, проте, включає в себе всі фізично вільне місце - незаповнені шматки MFT-зони туди теж включаються. Механізм використання MFT-зони такий: коли файли вже не можна записувати в звичайний простір, MFT-зона просто скорочується (в поточних версіях операційних систем рівно в два рази), звільняючи таким чином місце для запису файлів. При звільненні місця у звичайній області MFT зона може знову розшириться. При цьому не виключена ситуація, коли в цій зоні залишилися і звичайні файли: ніякої аномалії тут немає. Що ж, система намагалася залишити її вільною, але нічого не вийшло. Життя триває... Метафайл MFT-таки може фрагментуватися, хоч це і було б небажано.

10. Використання api функцій для роботи з файлами

Win32 API (розшифровується як інтерфейс прикладних програм) - це множина підпрограм-функцій, на яких побудована операційна система WINDOWS, яка використовує 32х-бітну адресацію, починаючи з WINDOWS 95 і закінчуючи WINDOWS XP. Розробники WINDOWS зробили багато зусиль щоб стандартизувати як назви функцій, так і їх параметри. Тому використовувати їх не так важко, якщо засвоїти деякі загальні концепції. Суть функцій API зрозуміти значно легше, якщо уявити, з яких файлів вони викликаються і на які групи ці функції поділяються. Асемблер - це як раз той зручний і простий засіб, який дозволить вам звертатись безпосередньо до будь-якої функції API, що знаходиться у DLL-файлі.

Основні функції Win32 API використовувані для роботи з файлами і каталогами:

  1. CreateFile – создание или открытие файла

  2. DeleteFile – удаление файла

  3. CloseHandle – закрытие файла

  4. ReadFile – чтение из файла

  5. WriteFile – запись в файл

  6. LockFile – блокировка файла

  7. UnlockFile – разблокировка файла

  8. FindFirstFile – поиск первого файла по заданному имени или маске

  9. FindNextFile – поиск каждого последующего файла по заданной маске

  10. FindClose – завершение поиска

  11. SetFilePointer – установка указателя в файле

  12. CreateDirectory – создание каталога

  13. RemoveDirectory – удаление пустого каталога

Примітка:

• видалення каталогу, оскільки функція RemoveDirectory видаляє лише порожні каталоги. Реалізувати функцію видалення будь-яких каталогів з використанням рекурсії або стеків на основі функцій RemoveDirectory, FindFirstFile, FindNextFile, FindClose і DeleteFile;

• При створенні проекту необхідно використовувати бібліотеку kernel32.lib;

• у вихідному файлі підключати заголовні файли: (include "windows.h", "winbase.h").

Довідкова інформація по функціях API, що використані в роботі

CopyFileA - копіює файл LpExistingFileName // вказівник на ім'я файлу, що копіюється; LpNewFileName // вказівник на ім'я файлу-копії BOOL bFailIfExists // якщо значення - ненульове, то в разі існування файлу-копії, функція не виконується; якщо значення - нульове - файл перезаписується.

DeleteFileA - знищує заданий файл LPCTSTR lpFileName // вказівник на ім'я файлу, який знищується. GetFileAttributesA -отримує атрибути заданого файлу або каталогу LPCTSTR lpFileName // адреса імені файлу або каталогу; В результаті регістр EAX буде містити побітну інформацію про атрибути файла. Нижче наведений перелік номерів бітів і атрибутів, що їм відповідають: 0 – READONLY файл (каталог) тільки для читання; 1 – HIDDEN файл (каталог) є прихованим; 2 – SYSTEM файл (каталог) виключно використовується операційною системою; 4 – DIRECTORY "файл або каталог" є каталогом; 5 – ARCHIVE файл (каталог) є архівним. Автоматично встановлюється, якщо файл (каталог) переносився; 7 – NORMAL файл (каталог) немає інших атрибутів; 8 – TEMPORARY файл для тимчасового зберігання даних, знищується після виконання програми,яка його створює; 11 – COMPRESSED файл (каталог) є стиснутим; 12 – OFFLINE дані у файлі тимчасово є недоступними. GetLocalTime - заповнює структуру lpSystemTime значенням місцевого часу та дати LpSystemTime // адреса структури системного часу, яка буде заповнена (див. текст програми);

GetLogicalDrives - отримує інформацію про логічні диски, наявні в системі (0-й біт в регістрі EAX - диск A, 1-й - диск B і т.д.) GetLogicalDriveStringsA - отримує інформацію про шляхи до кореневих каталогів логічних дисків, наявних в системі DWORD nBufferLength // довжина буферу; LPTSTR lpBuffer // адреса буферу для рядка імен логічних дисків, розділених символами нуля. Ім’я останнього диску закінчується двома нулями. GetSystemTime - заповнює структуру lpSystemTime значенням поточного часу за Грінвичем (див. також функцію GetLocalTime).

GetTempFileNameA - отримує ім'я тимчасового файлу для використання програмою-ужитком LPCTSTR lpPathName // адреса імені каталогу для тимчасового файлу; LPCTSTR lpPrefixString // адреса префіксу імені тимчасового файлу; UINT uUnique // число, яке з'єднується з префіксом для створення імені тимчасового файлу (0-випадкове число); LPTSTR lpTempFileName // адреса буферу для імені тимчасового файлу. RemoveDirectoryA -знищує заданий каталог LPCTSTR lpPathName // адреса каталогу, який знищується.

SetCurrentDirectoryA - встановлює поточний каталог LPCTSTR lpPathName // адреса імені нового поточного каталогу.

SetFileAttributesA - встановлює атрибути файлу (див. функцію GetFileAttributesA) LPCTSTR lpFileName // адреса імені файлу; DWORD dwFileAttributes // 32х-бітна константа, що задає атрибути файлу. SetVolumeLabelA - встановлює мітку тому для диску LPCTSTR lpRootPathName // адреса імені кореневого каталогу; LPCTSTR lpVolumeName // адреса імені мітки.

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