D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Общие сведения / Unix Files

Unix Files

Файлы Unix

Через OSFI возможен доступ к файлам Unix, как к записям D3, используя AQL, Pick/BASIC, FlashBASIC и др. Этот раздел описывает формат q-указателя, структуру файла и правила доступа.

Соглашения

Поскольку файловая система D3 в корне отличается от файловой системы Unix, существует ряд соглашения для установления соответствия объектов файловой системы:

  • запись D3 соответствует файлу Unix
  • по умолчанию, маркеры атрибутов D3 преобразуются в символ новой строки (дес. код 10). Это преобразование может быть в ряде случаев отменено.
  • по умолчанию, если файл Unix содержит обычные разделители D3, они преобразуются в последовательности из двух символов: DLE (дес. код 16) и следующий печатный символ.
SM   DLE  _
AM   DLE  ^
VM   DLE  ]
SVM  DLE  \
DLE  DLE  DLE
  • текстовые файлы Unix обычно заканчиваются пустой строкой, в то время как текстовые записи D3 не имеют в конце маркера атрибута (эквивалент пустой строки в D3). По умолчанию, завершающая пустая строка (которая должна конвертироваться в маркер атрибута) убирается, когда запись читается в D3 и добавляется, когда запись передается снова в Unix. Это удобно при работе с текстовыми записями, но в случае сохранения двоичных записей добавляется пустая строка. Поэтому, это преобразование должно быть отключено с помощью опции "A" при редактировании двоичных записей и, особенно, при сохранении директории Unix.
  • Опционально, блок пробелов, предшествующих тексту, выровненному по позиции табуляции, может быть заменен на соответствующее число символов табуляции. Этот процесс реверсируется при передаче записи в Unix.
  • файл D3 соответствует одной и более директориям Unix. Основной раздел данных файла отображается на директорию с тем же именем. Словарный раздел соответствует поддиректории с именем ".DICT". Другие разделы данных отображаются на поддиректории в директории ".DICT" с точкой впереди. Словарный раздел не является обязательным и требуется только, если в нем содержаться какие-либо данные. Если словарь отсутствует, а приложение пытается получить доступ к его записям, файловая система открывает его с ошибкой (при чтении - нет записей, при записи - защита от записи). Рассмотрим, например, D3 файл "bp" со словарем и двумя разделами данных.
                bp
                |
  +------+------+------+
  |      |      |      |
item1  item2  item3  .DICT
                       |
                       +-------+
                       |       |
                     ditem1   ditem2

Эта, с виду сложная, структура имеет целью максимально упростить работу с плоскими файлами и сделать внутренние объекты (.DICT) невидимыми по умолчанию для D3 TCL команды list или Unix команды ls.

Формат Q-указателя

Формат Q-указателя на Unix файл:

file.name
001 Q
002
003 unix:directory{]options}
directory имя директории Unix, куда отображается основной раздел данных. Эта директория может быть любым разрешенным именем для директории (локальная директория, подмонтированный сменный носитель, директория NFS). Специальные файлы (устройства, каналы и т.д.) тоже могут быть указаны с некоторыми ограничениями.
options строка алфавитно-цифровых символов, управляющая драйвером. Для улучшения читабельности в строку могут быть включены пробелы. Строка записывается за именем директории через маркер значения.
tn конвертирует впереди идущие пробелы в символы табуляции. По умолчанию отключена. Эта опция модифицирует данные и применима только к текстовым файлам. Допустимый диапазон значений для n: от 2 до 9.
A указывает, что дополнительный маркер атрибута всегда добавляется, когда файлы Unix переносятся в D3, и что этот маркер всегда удаляется, когда данная запись возвращается в Unix. Эта опция совершенно необходима, когда сохраняются или копируются разные файлы или при копировании на носитель. Без этой опции нетекстовые записи могут иметь лишнюю пустую строку, добавленную с конца, при сохранении в файловой системе Unix.
c указывает, что объектом является специальный символьный файл. Эта опция налагает ряд ограничений (см. ниже раздел "Специальные файлы").
n подавляет преобразование маркера атрибута в символ новой строки. По умолчанию при сохранении записи D3 маркер атрибута преобразуется в символ новой строки для удобства редактирования в Unix. При этом в конец записи при сохранении в файле Unix добавляется маркер атрибута, если не указана опция A.
R не обрабатывать данные. Эта опция позволяет читать и записывать данные заметно быстрее, чем по умолчанию и при использовании других опций. Не совместима с опциями A и T. Кроме того, символ с кодом 255 (маркер сегмента) при чтении из файла Unix преобразуется в символ подчеркивания.
s нечувствительные к регистру идентификаторы записи и имена файлов. С этой опцией имена файлов и идентификаторы записей преобразуются к нижнему регистру для устранения чувствительности к регистру. См. раздел посвященный чувствительности к регистру ниже.
Блокировки записей

Блокировки записей не поддерживаются.

Q-указатели Unix на специальные файлы

В качестве директории Unix можно задать специальный символьный файл (канал, устройство), указав опцию c в q-указателе. При этом существует ряд ограничений:

  • специальные файлы не могут иметь словарей или других разделов данных.
  • допустимы только операции OPEN, READ, WRITE и CLOSE. Операция DELETE игнорируется. Последовательный доступ (например, LIST) возвращает "нет записей".
  • при записи нет гарантии, что данные запишутся одним блоком. Это особенно важно для каналов, где понятие элементарной операции записи является критичным.
  • при чтении устройство должно иметь возможность определить размер данных с помощью системного вызова Unix fstat(). Например, канал может быть пустым (размер 0) в одном случае и содержать данные в другом. Приложение должно быть готово обрабатывать пустые записи.
Чувствительность к регистру

Если в Unix q-указателе задана опция "S", имена файлов и идентификаторы записей преобразуются к нижнему регистру. Однако, драйвер не обнаруживает файлы с различным регистром в одной директории. Например, /bp/TEST и /bp/test - две различные записи. Пользователь должен быть аккуратен при использовании инструментов Unix для доступа к файлам, или делать это из D3 через Unix q-указатель с опцией "S".

Данные файла не конвертируются.

Примеры:

1. Создаем Unix q-указатель на FlashBASIC программу, расположенную в Unix:

pgm
001 Q
002
003 unix:/home/dev/bp
    t4

2. Используется преобразования по умолчанию наряду с конвертацией пробелов в символ табуляции.

3. Создаем Unix q-указатель на директорию Unix, которая будет сохранена при выполнении операции сохранения файлов в D3:

bob
001 QS
002
003 unix:/home/bob
    a

Используется опция "A" (append) для добавления маркера атрибута к данным D3 (который убирается при записи обратно в Unix). Этот дополнительный маркер атрибута гарантирует, что данные будут сохранены и восстановлены полностью без искажений в результате преобразования.