Работа с файлами через дескрипторы (описатели) — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Работа с файлами через дескрипторы (описатели)

2023-01-01 22
Работа с файлами через дескрипторы (описатели) 0.00 из 5.00 0 оценок
Заказать работу

Если программы, написанные на языках высокого уровня могут от крыть файл без выполнения подготовительных действий (они выполняются автоматически), то ассемблерные программы должны создать специальные области данных, которые используются при операциях ввода/вывода. Используется два метода доступа к файлам: метод управляющего блока файла (FCB) и метод дескриптора файла (Handle). С помощью метода FCB можно получить доступ только к файлам, находящимся в текущем каталоге. Метод дескриптора файла позволяет получить доступ к любому файлу, независимо от того, какой каталог является текущим.

Начиная с DOS версии 2.0, в набор функций прерывания 21h включены UNIX-подобные файловые функции. Идея их состоит в том, что, когда программа открывает файл, DOS возвращает 16-битовое значение «описателя файла» (дескриптора файла) (handle). После этого, когда программа читает, позиционирует, пишет или закрывает файл, она ссылается на него через описатель. Одно из самых больших удобств – то, что можно обращаться к некоторым устройствам так, как будто это дисковые файлы, через зарезервированные описатели DOS:

 

Предопределенные описатели DOS

Handle Наименование и описание
0 Стандартное устройство ввода (обычно клавиатура)
1 Стандартное устройство вывода (обычно экран)
2 Стандартное устройство ошибок (всегда CON - экран.Для сообщений)
3 Стандартное устройство AUX (1-й посл. Порт)
4 Стандартный принтер LPT1

 

Ниже приведен перечень наиболее часто используемых функций прерывания 21h для работы с файлами через описатели.

 

Функция 3cH

Создать файл.

Вход. AH=3ch

DS:DX=адрес строки ASCIIZ с именем файла

CX=атрибут файла

Выход. AX=код ошибки, если CF установлен и описатель файла, если ошибки нет.

Описание. Файл создается в указанном (или умалчиваемом) оглавлении и открывается в режиме доступа «чтение/запись». Если файл уже существует, то при открытии файл усекается до нулевой длины. Если атрибут файла – «только чтение», открытие отвергается (атрибут можно изменить функцией 43H).

 

Функция 5bH

Создать новый файл (не должен существовать).

Вход. AH=5bh

DS:DX=адрес строки ASCIIZ с именем файла

CX=атрибут файла

Выход. AX=код ошибки, если CF установлен и описатель файла, если ошибки нет

Описание. Этот вызов идентичен функции 3ch, с тем исключением, что он вернет ошибку, если файл с заданным именем уже существует.

 

Функция 5aH

Создать уникальный файл.

Вход. AH=5ah

DS:DX=адрес строки ASCIIZ с путем (заканчивается \)

CX=атрибут файла

Выход. AX=код ошибки, если CF установлен и описатель файла, если ошибки нет

DS:DX (не изменяется) становится полным

ASCIIZ-именем нового файла.

Описание. Открывает (создает) файл с уникальным именем в оглавлении, указанном строкой ASCIIZ, на которую указывает DS:DX. Описание пути должно быть готово к присоединению в его конец имени файла. Необходимо обеспечить минимум 12 байт в конце строки. После возврата строка DS:DX будет дополнена именем файла. DOS создает имя файла из шестнадцатеричных цифр, получаемых из текущих даты и времени. Если имя файла уже существует, DOS продолжает создавать новые имена, пока не получит уникальное имя.

 

Функция 3dH

Открыть файл.

Вход. AH=3dh

DS:DX=адрес строки ASCIIZ с именем файла

AL=режим открытия

Выход. AX=код ошибки, если CF установлен и описатель файла, если ошибки нет

Описание. В момент открытия файл должен существовать. Файл открывается в выбранном режиме доступа (AL = 0 – для чтения; AL = 1 – для записи; AL = 2 – для чтения и записи) и указатель «чтения/записи» устанавливается в 0.

 

Функция 3eH

Закрыть файл.

Вход. AH=3eh

BX=описатель файла

Выход. AX= код ошибки, если CF установлен

Описание. BX содержит описатель файла (handle), возвращенный при открытии. Файл, представленный этим описателем, закрывается, его буфер сбрасываются, а оглавление обновляется корректными размером, временем и датой.

 

Функция 41H

Удалить файл.

Вход. AH=41h

DS:DX=адрес строки ASCIIZ с именем файла

Выход. AX=код ошибки, если CF установлен

Описание. Имя файла не может содержать обобщенные символы («?» и «*»). Файл удаляется из заданного оглавления заданного диска. Если файл имеет атрибут только чтение, то перед удалением необходимо изменить этот атрибут через функцию 43H.

 

Функция 42H

Установить указатель чтения/записи (можно также узнать размер файла).

Вход. AH=42h

BX=описатель файла

CX:DX=смещение указателя: (CX * 65536) + DX

AL=0 переместить к началу файла + CX:DX

AL=1 переместить к текущей позиции + CX:DX

AL=2 переместить к концу файла - CX:DX

Выход. AX=код ошибки, если CF установлен

DX:AX=новая позиция указателя файла (если нет ошибки)

Описание. Перемещает логический указатель чтения/записи к нужному адресу, с которого начнется очередная операция чтения или записи. Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX. DX здесь старшее значащее слово: действительная длина (DX * 65536) + AX.

 

Функция 3fH

Читать из файла/устройства.

Вход. AH=3fh

BX=описатель файла

DS:DX=адрес буфера для чтения данных

CX=число считываемых байт

Выход. AX=код ошибки, если CF установлен

AX=число действительно прочитанных байт

Описание. CX байт данных считываются из файла или устройства с описателем, указанным в BX. Данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX.

Всегда необходимо сравнивать возвращаемое значение AX (число прочитанных байт) с CX (запрошенное число байт):

− если AX=CX, (и CF сброшен) – чтение было корректным без ошибок;

− если AX=0 – достигнут конец файла (EOF);

− если AX<CX (но ненулевой), то возможны два варианта: при чтении с устройства – входная строка имеет длину AX байт; при чтении из файла – в процессе чтения достигнут EOF.

 

Функция 40H

Писать в файл/устройство.

Вход. AH=40h

BX=описатель файла

DS:DX=адрес буфера, содержащего данные

CX=число записываемых байт

Выход. AX=код ошибки, если CF установлен

AX=число действительно записанных байт

Описание. CX байт данных записывается в файл или на устройство с описателем, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX и записываются, начиная с текущей позиции указателя чтения/записи файла. Необходимо всегда сравнивать возвращаемое значение AX (число записанных байт) с CX (запрошенное число байт для записи): если AX = CX, запись была успешной; если AX < CX, встретилась ошибка (скорее всего, переполнение).

 

Некоторые функции в качестве параметра используют атрибут файла. Атрибут - это один байт битовых флагов, связанный с каждым файлом и находящийся в элементе оглавления для файла. В атрибуте определены следующие биты:

 

x x A D V S H R

 

R- только чтение (нельзя обновлять или удалять);

H- скрытый;

S- системный;

V- метка тома;

D- элемент подоглавления;

A- архивный;

x- не используются.

 

ASCIIZ строка, содержащая имя файла, должна иметь вид:

«‘d:\путь\имя_файла’,0»

 

Если диск и/или путь опущены, они принимаются по умолчанию. После вызова функции описатель файла должен быть сохранен для последующих операций. Количество описателей в системе регламентируется файлом CONFIG.SYS.

Приведенный ниже пример иллюстрирует процесс работы с файлом через описатели в ассемблерной программе.

.data

buf db ‘d:\Users\1.txt’,0

. code

;Создание файла

mov ah,3 ch  ;номер функции создания файла

mov cx,0   ;атрибуты создаваемого файла

lea dx, buf;в DS:DX – адрес ASCIIZ строки с;именем создаваемого файла

int 21 h     ;вызов функции создания файла

jc no _ create;Проверка флага переноса, если;установлен – обработка ошибки

...;Работа с файлом

 

no _ create: ;обработчик ошибки создания

Задания к выполнению лабораторной работы выдаются преподавателем непосредственно перед занятием

Примеры вариантов заданий

1. Чтение данных входного текстового файла Input.txt и запись в выходной файл Output.txt содержимого входного с удалением повторений символов. Например, при содержимом входного файла aafhkdjjjlll должен быть создан выходной файл с содержимым afhkdjl.

2. Чтение данных входного текстового файла Input.txt и запись в выходной файл Output.txt содержимого входного с удалением символов, описанных как массив в сегменте данных программы. Например, при содержимом входного файла aafhkdjjjlll и массиве, содержащем символы afd, должен быть создан выходной файл с содержимым hkjjjlll.

3. Ввод символов с клавиатуры с записью введенной строки в файл Text.txt с удалением прописных букв. После запуска программы ожидается ввод строки. Введенные символы дописываются в конец существующего файла. Если файл не существует, его необходимо создать. При нажатии клавиши Enter файл закрывается и программа завершает работу.

4. Ввод символов с клавиатуры и запись каждого второго символа в выходной файл output.txt. После запуска программы ожидается ввод строки. Введенные символы дописываются в конец существующего файла. Если файл не существует, его необходимо создать. При нажатии клавиши Enter файл закрывается и программа завершает работу.

5. Чтение входного текстового файла и вывод на экран всех символов, кроме прописных. Выход из программы – по нажатию клавиши ESC.

6. Ввод символов с клавиатуры. На экране должны отображаться только строчные английские буквы, они же записываются в текстовый файл. Выход из программы – по нажатию клавиши ENTER.

7. Вывод на экран кодовой таблицы символов и запись ее в текстовый файл.

 

Содержание отчета

1. Тема и цель работы.

2. Задание на лабораторную работу.

3. Блок-схема программы.

4. Листинг программы.

5. Выводы по работе.

Контрольные вопросы

1. Каков порядок вызова прерываний?

2. Как передаются аргументы функций?

3. Как возвращается результат работы функции?

4. Функции для работы с клавиатурой?

5. Какие существуют методы для работы с файлами?

6. Какие основные функции для работы с файлами через дескрипторы?


Лабораторная работа № 4


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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.043 с.