Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать
      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

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

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