Команды работы с файлами записей
Команды данной группы применимы к файлам записей фиксированной (FRF) и переменной (VRF) длины, а также к циклическим файлам записей фиксированной длины (CRF).
типы файлов:
DF (MF) | BF | FRF | VRF | CRF | TF | KF | ARF |
- | - | + | + | + | - | - | - |
Если команда содержит короткий идентификатор файла, то файл предварительно выбирается и остается текущим после завершения команды.
К записям можно осуществлять доступ по номеру, по тэгу (для VRF) и по указателю на текущую запись. При доступе по номеру указатель на текущую запись не сдвигается.
Сразу после явного выбора файла (в том числе с использованием обращения по короткому идентификатору) указатель на текущую запись выставляется на первую запись независимо от того, был ли ранее этот файл текущим, причем в этом случае доступ к следующей записи равносилен доступу к первой записи.
В файлах с линейной организацией первой считается самая ранняя запись, а в циклических файлах – самая поздняя запись.
Записи нумеруются от 1. Номер 0 обозначает текущую запись.
В файлах VRF записи хранятся в формате SimpleTLV с полями Tag и Length размером 1 байт. В файле может быть несколько записей с одинаковыми тэгами. Тэги 0 и 255 зарезервированы. Поле данных команд добавления, обновления и чтения записей для файлов VRF всегда представляется формате SimpleTLV, то есть, первый байт – тэг, второй – длина последующих данных, далее – сами данные указанной длины.
Количество записей в файле любого типа ограничено числом 254.
Размер каждой записи в файлах фиксированной длины не больше 255 байт, а в файлах записей переменной длины – не больше 254 байт (т.к. значение длины 255 зарезервировано для 3-х байтовых длин).
Если файл пуст, то попытка прочитать запись любым способом повлечет ошибку (как в линейном, так и в циклическом файле). Попытка чтения записей «по второму кругу» в циклическом файле также приводит к ошибке.
Удаление записей не предусмотрено. Обновление (переписывание) записей возможно только в случае совпадения длины старой и новой записи.
Заголовок команд в общем случае кодируется следующим образом (кроме команды APPEND RECORD в случае FRF, CRF, VRF):
Таблица 3
P1 | 00 - текущая запись 1..254
|
P2 | старшие 5 бит: 0 - текущий файл 1..30 – короткий идентификатор файла 31 - RFU младшие 3 бита: |
Ниже приводятся примеры кодирования заголовков команд для разных типов файлов.
Для линейного файла записей постоянной длины (FRF):
00 00 - прочитать первую запись
00 02 - прочитать следующую запись
00 04 - прочитать текущую запись
xx 04 - прочитать запись #xx
Для циклического файла записей (CRF):
00 00 - прочитать последнюю (самую позднюю) запись
00 02 - прочитать предыдущую запись
00 04 - прочитать текущую запись
xx 04 - прочитать запись #xx от конца
Для файла записей переменной длины (VRF):
00 00 - прочитать первую запись
00 02 - прочитать следующую запись
00 04 - прочитать текущую запись
xx 00 - прочитать первую запись с тэгом xx
xx 02 - прочитать следующую запись с тэгом xx
xx 04 - прочитать запись #xx
Нечетные INS, обеспечивающие доступ к записи по частям, не поддерживаются.
9.5.1 APPEND RECORD
Добавление записи.
Для CRF – переписывание самой старой записи, если весь файл заполнен.
тип команды | out (case 2) |
формат команды:
CLA | 00 |
INS | E2 |
P1 | 00 – для FRF, CRF, VRF |
P2 | старшие 5 бит - см. Таблица 3 младшие три бита: 0 – для FRF, CRF, VRF |
Lc | размер записи |
данные | запись |
Le | - |
ответ | - |
9.5.2 READ RECORD
Чтение записи.
тип команды | out (case 2) |
формат команды:
CLA | 00 |
INS | B2 |
P1:P2 | см. Таблица 3 |
Lc | - |
данные | - |
Le | 0 or N>0 |
ответ | Le=0 – запись целиком Le=N – первые N байт записи |
9.5.3 UPDATE RECORD
Обновление записи.
тип команды | out (case 2) |
формат команды:
CLA | 00 |
INS | DC |
P1:P2 | см. Таблица 3 |
Lc | размер записи |
данные | запись |
Le | - |
ответ | - |