Команды работы с файлами записей

Команды данной группы применимы к файлам записей фиксированной (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
  • номер записи, если младшие 3 бита P2 имеют значение 4
  • тэг записи для VRF, если младшие 3 бита P2 имеют значение 0,2
FF – RFU
P2 старшие 5 бит:
0 - текущий файл
1..30 – короткий идентификатор файла
31 - RFU

младшие 3 бита:
0 – первая запись [для VRF – с тэгом P1, если P1≠0]
2 – следующая запись [для VRF – с тэгом P1, если P1≠0]
4 – ссылка на запись по номеру из P1
1,3,5..7 – не поддерживается

 

Ниже приводятся примеры кодирования заголовков команд для разных типов файлов.

Для линейного файла записей постоянной длины (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 -
ответ -

 

 

.