Что такое файл прямого доступа
Файлы прямого доступа характерны тем, что в любой момент времени можно получить доступ к любому существующему компоненту файла - связать буфер файла с любым существующим компонентом файла.
Все компоненты файла прямого доступа автоматически пронумерованы, начиная с 0. Номер компонента файла типа longint, т.е. теоретически в файле прямого доступа может быть свыше 2 млн. компонентов (правда, пока таких внешних устройств не существует).
В файлах прямого доступа читать можно любой существующий компонент файла, а записывать в файл можно либо на место любого существующего компонента, либо в конец файла.
С файлами прямого доступа можно работать в двух режимах:
- работа с существующим файлом прямого доступа. Открывается режим с помощью процедуры reset(<имя логического файла>). Попытка открыть этот режим для несуществующего файла приводит к ошибке ввода-вывода;
- создание нового файла прямого доступа . Открывается режим с помощью процедуры rewrite(<имя логического файла>). Если до открытия в этом режиме файл существовал, то информация в нем уничтожается.
При работе с файлами прямого доступа можно использовать следующие процедуры и функции (во всех нижеприведенных подпрограммах f – это имя логического файла):
- procedure write(var f:<имя файлового типа>; r:<тип компонента файла>) - процедура записи в текущий компонент файла значения выражения, указанного при обращении к процедуре. После выполнения процедуры записи буфер файла связывается со следующим по порядку компонентом файла. Если до выполнения процедуры текущим компонентом был конец файла, то, после выполнения записи на место этого признака, в следующий компонент файла запишется признак конца файла, и буфер свяжется с этим признаком.
- procedure read(var f:<имя файлового типа>;var r:<тип компонента файла>) - процедура чтения текущего компонента файла. Прочитанное из текущего компонента значение помещается в переменную, указанную при обращении к процедуре. Текущий компонент файла - это тот компонент, с которым связан буфер файла. После выполнения процедуры чтения буфер файла связывается со следующим по порядку компонентом файла. Выполнение процедуры возможно только в том случае, если текущий компонент не является признаком конец файла. Если буфер связан с этим признаком, то при выполнении процедуры происходит ошибка ввода-вывода;
- function eof(var f:<имя файлового типа>):Boolean – с помощью этой функции можно проверить связан ли буфер с признаком конец файла. Если результат true, то буфер связан с этим признаком, если – false, то буфер не связан с признаком конец файла, а находится на каком-то существующем компоненте файла;
- procedure seek(var f:<имя файлового типа>; n:longint) - процедура установки на n-ый компонент файла прямого доступа f. При выполнении процедуры буфер файла связывается с n-ым компонентом, если такой компонент существует. В случае, если файл содержит меньшее количество компонентов, произойдет ошибка ввода-вывода ( в этом случае при включенной системе прерываний по вводу-выводу программа снимется с решения);
- procedure reset(var f:<имя файлового типа>) - процедура установки на начало файла - буфер связывается с первым компонентом файла. Обращения seek(f,0) и reset(f) в процессе работы с файлом прямого доступа эквивалентны;
- procedure truncate(var f:<имя файлового типа>) - усекает файл, начиная с текущей позиции. После выполнения процедуры в текущую позицию, с которой был связан буфер, будет записан признак конца файла;
- function filepos(var f:<имя файлового типа>):longint - функция определения текущей позиции файла;
- function filesize(var f:<имя файлового типа>):longint -функция определения количества компонентов в файле (признак конца файла не учитывается).
Алгоритм сортировки файла прямого доступа
Сортировка файла методом пузырька (обменная сортировка)
Спецификация подпрограммы
- Назначение: сортировка файла прямого доступа из целых чисел по убыванию (файл обязательно существует; количество компонентов в файле произвольное).Файловый тип определяется ранее подпрограммы следующим образом type tf=file of integer;
- Имя: sortfilepuz
- Вид: процедура
- Перечень параметров:
Таблица 24.1.Перечень параметров
Метод решения
Так как в файле прямого доступа все существующие компоненты пронумерованы (то есть проиндексированы), то для сортировки файла прямого доступа можно использовать любой метод сортировки массива. Используем обменную сортировку с флагом, известную под названием метод "пузырька". При этом для сокращения количества переборов будем просматривать только неупорядоченную часть.
1. Связываем логический и физический файлы
assign(f,name) ;
2. Открываем для работы файл прямого доступа в режиме работы с существующим файлом
3. Определяем размер не отсортированной части файла (перед началом сортировки это все существующие компоненты файла)
nkz:=filesize(f) ;
4. Повторяем просмотр не отсортированной части элементов до выполнения условия до выполнения условия – при очередном переборе элементов перестановки не было (признак отсутствия перестановки – флаг flag при отсутствии перестановки имеет значение ложь, а при наличии – значение истина)
<просмотр не отсортированной части файла>
до
При просмотре не отсортированной части выполняются следующие действия:
а) признаку перестановки при начале очередного перебора присваивается значение ложь (нет перестановки)
b) перебираются все элементы не отсортированной части c начального по предпоследний. Начальный элемент имеет порядковый номер 0; предпоследний элемент – nkz-2 (минус два, т.к. нумерация не с единицы, а с нуля)
Для каждого номера элемента i выполняются следующие действия
b.1) буфер файла связывается с текущим элементом
b.2) читаются текущий и следующий элементы файла
Компилятор, обрабатывая такое обращение к процедуре чтения из файла, преобразует его в эквивалентный составной оператор
b.3) при сортировки по убыванию, если следующий элемент больше текущего (при сортировки по возрастанию, если меньше), то буфер файла связывается с текущим компонентом; записывается в файл следующее значение, а затем текущее; формируется признак наличия перестановки (флагу перестановки присваивается истина)
Компилятор, обрабатывая обращение к процедуре записи в файл, преобразует его в эквивалентный составной оператор
c) так как в правую часть файла переместился отсортированный элемент, то размер не отсортированной части уменьшается на единицу
Цель лекции: изучить организацию ввода-вывода в файлы на нижнем уровне, научиться решать задачи с использованием прямого доступа к данным файла на языке C++.
Ввод-вывод низкого уровня
Файл представляет собой именованную область внешней памяти, в которой хранится информация в виде последовательности байтов. С такой точки зрения можно рассматривать любой произвольный файл , поэтому доступ к его содержимому иногда удобно организовать на нижнем уровне с помощью средств прямого доступа к данным.
Рассмотренные ранее средства обмена с файлами позволяют записывать и считывать данные только последовательно. Операции чтения-записи всегда производятся, начиная с текущей позиции в потоке. Начальная позиция устанавливается при открытии потока и может соответствовать начальному или конечному байту потока в зависимости от режима открытия файла . При этом данные потока буферизируются и выполняется форматирование передаваемой информации.
Функции ввода-вывода низкого уровня (прямого доступа) осуществляют обмен с файлами или периферийными устройствами путем прямого обращения к соответствующим функциям операционной системы (системным вызовам). Отличительные особенности средств прямого доступа к файлам следующие.
- Они не предоставляют возможности буферизации информации при пересылке.
- Они не обеспечивают преобразования данных из внутреннего машинного представления в текстовый формат .
- Они дают возможность перемещать указатель текущей позиции в потоке на нужный байт.
- При низкоуровневом открытии файла с ним связывается файловый дескриптор . Дескриптор является целым значением, характеризующим размещение информации об открытом файле во внутренних таблицах операционной системы. Дескриптор используется при последующих операциях с файлом .
Основные функции низкого уровня
Функции низкого уровня, прототипы которых входят в стандартную библиотеку <io.h> , обычно применяются при разработке собственных подсистем ввода-вывода. Большинство функций этого уровня переносимы в рамках некоторых систем программирования на язык С или С++.
Функция открытия файла для чтения-записи
Для начала работы с файлом его необходимо открыть с помощью функции open .
где filename – указатель на строку символов, представляющую собой допустимое имя файла , в которое может входить спецификация файла (включает обозначение логического устройства, путь к файлу и собственно имя файла ). При указании полного пути в качестве разделителя используется символ "слэш" ('/'), а не " обратный слэш" ('\'), как принято. Это объясняется использованием символа " обратный слэш" в управляющих последовательностях в С++;
oflags – доступный тип операций, представляющий собой одну или несколько целочисленных констант, объявленных в файле <fcntl.h> . Если задана больше чем одна константа, тогда выполняется их объединение при помощи логического оператора ИЛИ ( | ). Состав доступных констант зависит от операционной системы. В таблице перечислены константы режима, встречающиеся практически во всех операционных системах.
sflags – необязательный параметр , который определяет тип доступа к файлу и представляет собой одну или несколько целочисленных констант, объявленных в файле <sys\stat.h> . Если задана больше чем одна константа, тогда выполняется их объединение при помощи логического оператора ИЛИ ( | ). Данный параметр применяется совместно с константой O_CREAT типа операций. Если открываемый файл существует, ТипДоступа игнорируется.
В случае успешного открытия файла данная функция возвращает неотрицательное целое значение , которое соответствует логическому номеру файла, а указатель устанавливается на начало файла. Максимальное число одновременно открытых файлов определяется константой HANDLE_MAX . При возникновении ошибки открытия файла функция возвращает значение -1 .
Функция открытия файла для разделенного доступа
Семантика разделения означает, что файловая система должна определить алгоритм работы, который применяется, когда несколько клиентов одновременно обращаются к одному файлу. Важно, чтобы все изменения, сделанные одним клиентом, были бы видны другим клиентам, когда они выполняют следующий системный вызов на чтение или запись в один и тот же файл . Открытие файлов для разделенного доступа к ним выполняется с помощью функции sopen .
где параметры filename , oflags, sflags имеют тот же смысл, что и в функции open .
shflags - устанавливаемый тип разделенного доступа к файлу , представляющий собой одну из целочисленных констант, объявленных в файле <fcntl.h> .
В случае успешного открытия файла данная функция возвращает неотрицательное целое значение , которое соответствует логическому номеру файла, а указатель устанавливается на начало файла. При возникновении ошибки открытия файла функция возвращает значение -1 .
Функция создания файла
Функция open предоставляет доступ к существующему файлу или создает его заново, а функция creat создает в файловой системе новый объект .
где параметры filename , sflags имеют тот же смысл, что и в функции open .
Если прежде в файловой системе не существовало объекта с указанным именем или полной спецификацией, будет создан новый файл с указанным именем и указанными правами доступа к нему. Если же такой файл уже существовал, размер файла усекается до 0 (освобождаются все существующие блоки данных и устанавливается размер файла равным 0). Созданный ранее файл должен при этом позволять производить запись в него, чтобы можно было создать "новый" файл с тем же самым именем.
Функция закрытия файла
После завершения работы с файлом его необходимо закрыть. Для этого используется функция close .
где fd - дескриптор открытого файла.
Ядро выполняет операцию закрытия, используя дескриптор файла и информацию из соответствующих записей в таблице файлов и таблице индексов. Если счетчик ссылок в записи таблицы файлов имеет значение , большее, чем 1, то это означает, что на запись в таблице файлов делают ссылку другие пользовательские дескрипторы (например, при разделенном доступе). В этом случае счетчик ссылок уменьшается на 1. Если счетчик ссылок в таблице файлов имеет значение , равное 1, операционная система освобождает запись в таблице и индекс в памяти, ранее выделенный системной функцией open .
Когда выполнение функции close завершается, запись в таблице пользовательских дескрипторов файла становится пустой. Попытки процесса использовать данный дескриптор заканчиваются ошибкой до тех пор, пока дескриптор не будет переназначен другому файлу в результате выполнения другой функции. Когда выполнение программного кода завершается, система проверяет наличие активных пользовательских дескрипторов файла данного сеанса и закрывает каждый из них. Таким образом, ни один сеанс выполнения кода не может оставить файл открытым после своего завершения.
Функция чтения из файла
Чтение из файла на нижнем уровне осуществляется побайтно, без буферизации , с помощью функции read .
где fd - дескриптор файла, возвращаемый функцией open ;
buffer – адрес структуры данных, определенной пользователем, где будут размещаться считанные данные в случае успешного завершения выполнения функции read ;
count - количество байтов, которые определяет пользователь для считывания.
Функция возвращает количество фактически прочитанных байтов. В процессе выполнения функции ядро операционной системы обращается в таблице файлов к записи, которая соответствует значению пользовательского дескриптора файла , следуя за указателем. Затем оно устанавливает значения нескольких параметров ввода-вывода в адресном пространстве , тем самым устраняя необходимость в их передаче в качестве параметров функции . При выполнении режима ввода -вывода "чтение" формируются значения следующих параметров:
- устанавливается флаг, свидетельствующий о том, что ввод-вывод направляется в адресное пространство структуры пользователя;
- значению поля счетчика байтов присваивается количество байтов, которые должны быть прочитаны;
- устанавливается адрес пользовательского буфера данных ;
- определяется значение смещения (из таблицы файлов), равное смещению в байтах внутри файла до места, откуда начинается ввод-вывод.
После считывания данные из блока копируются по назначенному адресу в структуру пользователя. При этом корректируются параметры ввода-вывода в адресном пространстве в соответствии с количеством прочитанных байтов: увеличивается значение смещения в байтах внутри файла и адрес структуры пользователя, куда будет доставлена следующая порция данных. Одновременно уменьшается число байтов, которые необходимо прочитать, чтобы выполнить запрос пользователя. Если запрос на чтение полностью не выполнен, происходит циклическое повторение описанных действий. Цикл завершается при достижении хотя бы одного из условий:
- запрос на чтение выполнен полностью;
- в файле больше нет данных (достигнут конец файла );
- операционная система обнаружила ошибку при чтении данных с диска или при копировании данных в структуру пользователя.
В процессе чтения данных происходит коррекция значения смещения в таблице файлов в соответствии с количеством фактически прочитанных байтов; поэтому успешное выполнение операций чтения выглядит как последовательное считывание данных из файла.
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Биболова Л.К.
В статье рассматривается организация работы с файлами прямого и последовательного доступа.Мақалада тікелей және тізбектелген режимдегі файлдармен жұмысты ұйымдастыру қарастырылады.The article deals with the organization file work of direct and consistent
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Биболова Л.К.
Методика быстрого обучения программированию на основе изучения классов задач (16-17) Программное обеспечение расчета объемов земляных работ при вертикальной планировке строительных площадок Элементы теории множеств. Система: ее структура и состояние О смешаной задаче для одного класса квазипараболических уравнений Методические подходы к решению заданий части С2 ЕГЭ по информатике i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.Текст научной работы на тему «Файлы данных прямого и последовательного доступа. Создание и использование»
ФАЙЛЫ ДАННЫХ ПРЯМОГО И ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА. СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ
Павлодарский государственный университет им. С. Торайгырова
Мак,алада пике.чей жоне пйзбеюпелген режимдег1 файлдармен жумыапы уйъшдастыру к,арастырылады.
В статье рассматривается организация работы с файлами прямого и последовательного доступа.
The article deals with the organization file work of direct and consistent
Одним из важнейших и практически значимых разделов при изучении языков программирования является работа с файлами.
При традиционном подходе «лекция - практические задания» понятие файла и операции с файлами трудно воспринимаются. Много времени уходит на изложение теоретического материала.
К моменту изучения данного раздела обучаемые уже имеют некоторый опыт программирования, поэтому нужно шире привлекать их самих к изучению теоретического материала.
В соответствии с данной идеей предлагается нижеследующий набор примеров и заданий для работы с файлами последовательного и прямого доступа.
В начале работы приведены краткие теоретические сведения, необходимые при разборе примеров и для выполнения предложенных заданий.
Удобным способом сохранения информации, получаемой во время выполнения программы, служит запись этой информации на магнитный носитель: диск, гибкий диск. Для записи информации на внешний носитель в языках программирования предусмотрены специальные объекты - файлы.
Файл [1] - набор данных, который имеет свое имя и размещается в каксм-либо месте: на жестком диске, дискете, экране или вводится с клавиатуры.
Данные, вводимые с клавиатуры или выводимые на экран дисплея, являются стандартным текстовым файлом. Файл*ы данных на жестком диске или дискете будем называть внешними. На практике целесообразность применения файлов диктуется следующими причинами:
- большие объемы данных, подлежащих обработке, могут быть заранее подготовлены и, главное, неоднократно применяться и модифицироваться, если их записать в отдельный файл.
- файл данных может быть подготовлен другой программой, становясь, таким образом, связующим звеном между разными задачами.
По способу доступа различают файлы последовательного и прямого доступа.
Файлом последовательного доступа [1] - называется файл, к элементам которого обеспечивается доступ в той последовательности, в какой они записывались.
Файлом прямого доступа [1] - называется файл, доступ к элементам которого осуществляется по адресу элемента.
Средства обработки фатов
Для организации ввода-вывода в программе определяются специальные переменные (файловые типы) и процедуры работы с файлами.
Файловые переменные необходимо объявить в разделе переменных следующим образом:
В разделе операторов необходимо связать физическое имя - путь к файлу и его полное имя.
Операции с текстовыми файлами в Pascal программах можно разбить на следующие группы:
- «открыть» файл и объявить, для чего он открыт (для ввода - reset;
- для вывода - rewrite;
- для ввода, корректировки и последующего вывода - append)
Формат операторов следующий:
Reset (идентификатор файла); Reset (f);
Rewrite (идентификатор файла); Rewrite (f);
Append (идентификатор файла); Append (f).
В операторах ввода-вывода необходимо указать идентификатор файла и список переменных.
Оператор ввода - Readln(f,a,b,c);
Оператор вывода - Writeln(ff, а, Ь, с); «Закрыть» файл в конце программы: Close (идентификатор файла); Close (f); Close (ff):
program creat_txt; type fil=text; var Frill; inf:string; name:string[12]; begin
Для закрепления практических навыков работы с файлами можно предложить выполнить следующие задания самостоятельно.
Задание 1. Составить программу, в которой открывается созданный в первом примере файл и содержимое файла распечатывается на экран а) по количеству записей б) по концу файла.
Задание 2. Составить программу, в которой производится добавление записей к существующему файлу.
Задание 3. Используя программы, полученные в приведенных примерах и в вышеизложенных заданиях, составить программу, которая выполняет работу с процедурами создания, записи и добавления записей в файл. Запрос на выполнение определенной процедуры выдается основной программой через меню в начале программы.
По всем заданиям представить отчет по форме:
1. Алгоритм работы программы.
2. Текст программы.
3. Протокол работы.
В Паскале имеются три класса файлов: типизированный файл, текстовый файл и не типизированный файл.
Любой файл, представляет собой линейную последовательность элементов, каждый из которых имеет тип элемента (или тип записи) файла. Каждый элемент файла имеет номер. Нумерация элементов файла начинается с нуля.
Обычно доступ к файлам организуется последовательно, то есть, когда элемент считывается с помощью стандартной процедуры Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующему по порядку элементу файла.
К типизированным файлам относятся файлы определенного типа, чаще всего это файлы, состоящие из записей. В программе они описываются следующим образом.
f: file of Filerec;
К типизированным файлам можно организовать прямой доступ с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к заданному элементу. Для определения текущей позиции в файле и текущего размера файла можно использовать стандартные функции:
FilePos (f) - возвращает для файла текущую позицию;
FileSize (f) - возвращает размер(количество записей файла).
Когда программа завершает обработку файла, он должен закрываться с помощью стандартной процедуры Close. После полного закрытия файла связанный с ним внешний файл обновляется. Затем файловая переменная может быть связана с другим внешним файлом.
Для очистки ошибки, которая может произойти, вы можете вызвать функцию IOResult. Если вы это не сделали, и текущим состоянием является , то из-за оставшейся ошибки IOResult следующая операция ввода-вывода завершится с ошибкой.
Рассмотрим примеры работ с типизированными файлами
Пример 1. Составить программу, обеспечивающую создание на диске типизированного файла и запись в него текста. Имя создаваемого файла и
количество записей в нем вводится с клавиатуры.
uses crt; type fil= record
i,count:integer; inf:string; name:string[l 2]; work:fil; begin
Пример 2. Составить программу, которая открывает существующий типизированный файл и распечатывает содержимое файла на экран по признаку конца файла (в листинге программы в виде комментариев предусмотрена возможность распечатывания содержимого файла по количеству записей), i:: program read_tip; ,uses crt; type fil= record
Файлы прямого доступа – файлы с постоянной длиной записи, расположенные на устройствах прямого доступа. Обеспечивают наиболее быстрый доступ к произвольным записям и их использование – наиболее перспективное в системах баз данных
Файлы последовательного доступа организованы на устройствах последовательного доступа.
Файлы последовательного доступа могут быть организованы двумя способами.
1. конец записи отмечается специальным маркером
2. в начале каждой записи записывается ее длина
В файлах последовательного доступа физический адрес расположения нужной записи может быть вычислен по номеру записи, но такой доступ в базах данных неэффективный.
Чаще всего необходим поиск по первичному ключу или выборка по внешним ключам. Во всех этих случаях известно значение ключа, но неизвестен номер записи. В некоторых случаях возможно построение функций, которые по значению ключа однозначно вычисляют адрес.
NZ – номер записи
k – значение ключа
Функция должна быть линейной, чтобы обеспечивать взаимнооднозначное соответствие.
Когда это не удается, применяются методы хэширования и создаются специальные хэш-функции.
Суть: берется значение ключа и используется для начала поиска, то есть вычисляется некоторая хэш-функция, и полученное значение берется в качестве адреса начала поиска. То есть не требуется такого соответствия, но для увеличения скорости ограничивается время этого поиска. Поэтому допускается, что нескольким разным ключам может соответствовать одно значение хэш-функции, то есть один адрес. Это коллизии. Значения ключей, которые имеют одно и то же значение хэш-функции – синонимы. При использовании хэширования как метода доступа необходимо выбрать хэш-функцию и метод разрешения коллизии.
Существуют разные методы:
1. использование сгенерированного адреса в качестве начальной точки для последовательного просмотра. С этого адреса начинается поиск свободного места в памяти
2. сгенерированный адрес считается при этом адресм хранения не одной конкретной записи, а области памяти, в пределах которой размещаются все записи, получившие этот адрес. В пределах страницы записи могут размещаться в последовательном порядке поступления. Если со временем структура окажется заполненной, в памяти выделяется новая страница, связываемая с предыдущей указателем. Хэш-функция может генерировать абсолютный адрес страницы и ее номер.
Плотный, неплотный индекс
Индексные файлы можно представить как файлы, состоящие из двух частей. Индексная область образует отдельный индексный файл, а основная область образует файл, для которого создается индекс. В зависимости от организации индексной и основной областей различают 2 типа файлов – с плотным индексом и неплотным.
Файлы с плотным индексом
В этих файлах основная область содержит последовательность записей одинаковой длины, расположенных в произвольном порядке, в структура записи в ней имеет следующий вид:
Значение ключа – значение первичного ключа
Номер записи – порядковый номер записи в основной области.
В этих файлах для каждой записи в основной области существует запись одна запись из индексной области. Все записи в индексной области упорядочены по значениям ключа.
Схематично это можно представить следующим образом:
Когда исчезает свободная область, возникает переполнение индексной области. В этом случае возможны 2 решения:
1. перестроить заново индексную область
2. организовать область переполнения для индексной области, в которой будут храниться не поместившиеся в основную область записи
Первый способ требует дополнительного времени на переработку индексной области.
Второй способ увеличивает время на доступ к произвольной записи и требует организации дополнительных ссылок на область переполнения.
Файлы с неплотным индексом
Неплотный индекс строится для упорядочения файлов. Структура записей индекса для таких файлов имеет следующий вид
В индексной области ищется блок по заданному значению первичного ключа. Так как все записи упорядочены, то значение первой записи блока позволяет определить, в какой области находится искомая запись, а остальные действия происходят в основной области. В случае плотного индекса после определения местонахождения искомой записи, доступ к ней осуществляется прямым способом, поэтому этот способ организации индекса называется индексно-прямым.
В случае неплотного индекса после нахождении блока, где расположен запись, поиск внутри блока требуемой записи происходит последовательным просмотром. Поэтому этот способ называется индексно-последовательным.
Инвертированные списки
Часто приходится проводить операции доступа по вторичным ключам. Для обеспечения ускорения доступа по вторичным ключам, используются структуры, называемые инвертированными списками.
Инвертированный список (в общем случае) – двухуровневая индексная структура. На первом уровне находится файл или часть файла, где упорядочено расположены значения вторичных ключей. Каждая запись с вторичным ключом имеет ссылку на номер первого блока в цепочке блоков, содержащих номера записей с данным значением вторичного ключа. На втором уровне находится цепочка блоков, содержащих номера записей, содержащих одно и то же значение вторичного ключа. При этом блоки второго уровня упорядочены по значению вторичного ключа. На третьем уровне находится основной файл. Для одного основного файла может быть создано несколько инвертированных списков по разным значениям вторичного ключа.
Читайте также: