Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




В машинах виду 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 буде міститись число фактично прочитаних байтів.




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.