Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Структуры!!!.docx
Скачиваний:
20
Добавлен:
04.04.2018
Размер:
1.01 Mб
Скачать

Последовательные файлы

В любом случае в файле существует записи с разными типами.

Type T=File of To; S n (длина файла) S=(S0,S1,..,Sn-1)

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

Естественный доступ к записи файлов – последовательно. Следовательно, файл просматривается от текущего элемента к следующему и формируем файл добавлением элементов только в конец файла. Исключение составляет текущий элемент файла. Последовательный доступ дает возможность использование эффективной буферизации. Когда при перекачки данных между памятью различного вида используется потоки данных. Буферизация предполагает, что части потока накаливаются в буферах. Когда буфер заполнен, он сбрасывает себя в нужном направлении. Метод буферизации включен в любую файловую систему.

Элементарные операции над файлами.

Множества элементарных операций над файлами должны входить операции формирования и контроля. С каждой файловой переменной всегда связана позиция.

  1. Open(s) Определяет s как пустую файловую переменную.

  2. Write(s,x) Добавляет элемент со значением х в конец файла s.

  3. Reset(s) Устанавливает текущую позицию в конец файла.

  4. Read (s,x)

Присваивает текущий элемент файла s в переменную х. Позиция должна переместиться к следующему элементу

Операции считаю, как процедуры. Т.к. тип файловой переменной фигурирует в списке параметров, то его нужно описать. Для его описания используется запись record, в ней должно быть поле массив для моделирования последовательности данных в файле. Поле для текущей позиции и поле фиксирующее текущую длину файлов.

Введен тип Boolean который покажет верно ли выполнена операция.

Unit File system; Interface Const MaxLenght=4096; Type Seguence=record; pos__,length__:word; eof__:boolean; a:array [0..4096-1] of word; end; Procedure Open(var f:sequence); Procedure write (var f:sequence; w:word); Procedure Reset (var f:sequence); Procedure Read (var f:sequence; w:word); Procedure Close (var f:sequence); Implementation Procedure Open; begin f.pos_:=0; f.Lenght:=0; f.eof_:=False; end; Procedure write; begin with f do begin a[pos]:=w; pos_:=pos+1; length_:=pas_ end else Halt; end;end; Procedure Reset; begin f.pos_:=0; f.eof_:=False; end; Procedure Read; begin with f do begin if pos_:=length_ then eof_:=True else begin w:=a[pos_]; pos_:=pos_+1; end;end;end; Procedure Close; begin end;

Буферизованная последовательность.

Фактически диск рассматривается как массив блоков, которые читаются или записываются целиком. Буферизация используется следующим образом. Данные собираются в буферную переменную в оперативной памяти и когда по количеству данных накапливается блок, этот блок передается.

Буферизация позволит производителю и потребителю работать с буфером в определенной степени независимо друг от друга. Буфер представляет собой очередь. Принцип работы очереди: первый пришел, первый ушел. FIFO

Если эта структура является массивом, то организуется 2 переменные. In,out – будут указывать позиции, в которых записаны элементы in и из которыз извлекается out. Однажды прочитанный элемент больше не используется. Буфер программируется как циклическая или кольцевая очередь.

Кроме обработки позиции in out, фиксируется реальное заполненое число элементов в буфере. Существуют проблемы синхронизации работы нескольких задач при программировании буфера. Синхронизацию реализуют с помощью сигналов на уровне операционной системы.

Соседние файлы в папке Лекции