Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсак Олексин.doc
Скачиваний:
2
Добавлен:
28.10.2018
Размер:
942.59 Кб
Скачать

1. Основи програмування для ms dos

1.1. Робота з файлами

В машинах виду IBM PC передбачено два рівні обслуговування з магнітними дисками. При роботі на низькому рівні користувач з допомогою переривання BIOS INT 13h звертається саме до програм управлінням диском. Типовими операціями цього рівня являються запис і читання секторів або форматування доріжок. Файлова система DOS не використовується; необхідна інформація відкривається не по імені файла, а по номерам поверхності, циліндра і сектора.

Верхній рівень реалізується з допомогою переривання DOS INT 21h, який також підтримує і функції обслуговування файлової структури. Програміст працює не з програмами управління фізичним диском, а з файловою системою DOS, отримуючи можливість оперувати такими поняттями файлової системи, як логічний диск, каталог, файл.

Як відомо, для полегшення роботи з великою кількістю різнотипних файлів в DOS використовується деревовидна структура каталогів. Каталог представляє собою файл, звичайно невеликого розміру, в якому міститься перелік всіх підкаталогів наступного рівня і файлів, які входять в даний каталог.

При утворенні нового файла DOS сама знаходить на диску вільне місце і надає його новому файлу, утворюючи новий елемент в каталогу і заповнюючи його відповідною тому файлу інформацією. Хоча мінімальною порцією інформації, яку передає контролер диска в процесі запису або читання, являється сектор, і програми BIOS працюють як раз з секторами, файлова система надає місце на диску цілими кластерами. Таким чином, мінімальний фізичний розмір файла, навіть, якщо дані в ньому займають лише декілька байтів, дорівнює одному кластеру. Однак в елементі каталогу вказується не фізична, а логічна довжина файла, тобто об’єм розміщених в ньому даних в байтах.

Робота з файлами визначає використання дескрипторів (файлових індексів), які в першому заголовку можуть розглядати як номер відкритих файлів.

Процедура читання-запису файла поділяється на наступні операції:

  • утворення файла з вказаним ім’ям у вказаному каталогу або відкриття файла, якщо він був утворений раніше;

  • запис у файл або читання із файла всього вмістимого або будь-якої частини;

  • закриття файла.

В більшості випадків робота з файлом починається з виконанням операції його відкриття, для чого передбачена особлива функція DOS. Відкриваючи файл, DOS надає йому наступний вільний блок описання файла в системній таблиці відкритих файлів (System File Table, SFT). Об’єм цієї таблиці, який передбачає максимальне число файлів, з якими можна працювати одночасно, задається на етапі конфігурації DOS директивою FILES файлу CONFIG.SYS.

Звернення до відкритого файла (запис, читання, зміна характеристик файла і інш.) відбувається по присвоєному йому дескриптору; невідкритий файл дескриптора немає, і система працювати з ним не може. По мірі здійснення операцій з відкритим файлом DOS модифікує інформацію в блоку SFT; вміст SFT завжди відображає активного стану файла.

Після закінчення роботи з файлом його потрібно закрити призначеною для цього функцією DOS. В процесі закриття відбувається скид на диск буферів DOS, модифікація елемента каталогу і звільнення блока описання файла в SFT разом з закріпленим за ним дескриптором. Це і друге можна тепер використати для роботи з другим файлом.

При завершенні програми (для цього передбачена функція DOS 4Ch) відбувається автоматичне закриття всіх відкритих в програмі файлів. Для цього у простих і не дуже відповідальних програмах файли можна певним чином не закривати - вони все одно будуть закриті системою.

Функція 3Ch дозволяє утворити на диску файл із заданим ім’ям. Специфікація файла, тобто шлях до нього разом з ім’ям файла і його розширенням, вказується у вигляді символьної стрічки, яка закінчується подвійним нулем („рядка ASCIIZ”). Для специфікації файла в програмі діють звичайні правила DOS. Якщо, в специфікації файла відсутній шлях, файл утворюється в текучому каталозі текучого диска; якщо вказані шлях і ім’я файла, він утворюється у відповідному каталозі текучого диска і тощо.

Якщо функція 3Ch знаходить, що на диску уже є файл з вказаним ім’ям, вона фактично знищує його і утворює новий файл з тим же ім’ям.

Функція 40h дозволяє записати дані на любий пристрій, а в тому числі і в файл на диску. Конкретний приймач даних задається його дескриптором. Потрібно замітити, що при записі в файл, так і при виводі на любий пристрій, в приймач даних поступають лише ті дані, котрі вказані у програмі. Ніякі додаткові коди, наприклад, які вказують на кінець файлу, не записуються. Фактично у файл можна виводити любі дані. Функція запису 40h (так як і функція читання 3Fh) розглядає дані, які пересилаються, просто як послідовність байтів, не аналізуючи їх значення.

Функція 3Dh дозволяє відкрити уже існуючий файл. В регістрах DS:DX задається адрес специфікації файлу у вигляді рядка ASCIIZ; в регістрі AL – режим доступу (0 – читання, 1 – запис, 2 – читання і запис). Функція повертає дескриптор відкритого файла в регістрі AX.

Читання файла відбувається викликом функції 3Fh, яка потребує вказати вхідні параметри дескриптора джерела даних (в регістрі BX), адреса приймаючого буфера (в регістрах DS:BX) і в кількості байтів, які передаються (в регістрі CX). Якщо ми хочемо прочитати весь вміст файла, але не знаємо точно його довжини, можна в запиті на читання вказати завідомо більше число байтів (не більше 65535). Функція 3Fh сама визначить довжину файла і прочитає весь його вміст до кінця. Після повернення із DOS в регістр CX буде міститись число фактично прочитаних байтів.