Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
21
Добавлен:
02.05.2019
Размер:
690 Кб
Скачать
☆
      1. Чтение из файла и запись в файл

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

Функция DOS 3Fh — Чтение из файла или устройства

Ввод: AH = 3Fh

BX = идентификатор

CX = число байт

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

Вывод: CF = 0 и АХ = число считанных байт, если не произошла ошибка; иначе:

CF = 1 и АХ = код ошибки (05h или 06h)

Если при чтении из файла число фактически считанных байт в АХ меньше, чем заказанное число в СХ, при чтении был достигнут конец фай­ла.

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

Функция DOS 42h — Переместить указатель чтения/записи

Ввод: АН = 42h

ВХ = идентификатор

CX:DX = расстояние, на которое надо переместить указатель (со знаком)

AL = перемещение относительно: 0 — начала файла; 1 — текущей позиции; 2 — конца файла

Вывод: CF = 0 и CX:DX = новое значение указателя (в байтах от нача­ла файла), если не произошла ошибка; в противном случае:

CF = 1 и АХ = 06h (неправильный идентификатор)

Указатель можно установить за реальными пределами файла: если указатель представляет собой отрицательное число, следующая операция чтения/записи вызовет ошибку; если указатель представляет собой по­ложительное число, большее длины файла, следующая операция записи увеличит размер файла. Эта функция также часто используется для оп­ределения длины файла — достаточно вызвать ее с СХ = 0, DX = 0, AL = 2, и в CX:DX будет возвращена длина файла в байтах.

Функция DOS 40h — Запись в файл или устройство

Ввод: АН = 40h

ВХ = идентификатор

СХ = число байт

DS:DX = адрес буфера с данными

Вывод: CF = 0 и АХ = число записанных байт, если не произошла ошибка; иначе:

CF = 1 и АХ = код ошибки (05h или 06h)

Если при записи в файл указать СХ = 0, файл будет обрезан по текущему значению указателя.

Выше говорилось о буферизации потоков данных между программой и файлом. При записи в файл вначале происходит запись в буфер DOS, а уже в файл на диске данные попадают либо при закрытии файла, либо если их количество превышает размер сектора диска. Для немедленного сброса (выгрузки) буфера можно использовать функцию 68h.

Функция DOS 68h — Сброс файловых буферов DOS на диск

Ввод: АН = 68h

ВХ = идентификатор

Вывод: CF = 0, если операция выполнена

CF = 1, если произошла ошибка (АХ = код ошибки)

А для критических участков программ можно использовать более эффектив­ную функцию 0Dh.

Функция DOS 0Dh — Сброс всех файловых буферов на диск

Ввод: АН = 0Dh

Вывод: никакого

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