Особенности файловой системы EPOC: Статьи о Psion

Особенности файловой системы EPOC

Ввтор: Просто Юзер <Prosto_User@mail.ru>

В этой статейке я изложу пару замечаний по поводу файловой системы Псиона. Я потратил несколько часов на безуспешную борьбу со встретившимися мне реальными проблемами, так что если не хотите повторять эти эксперименты в полном объеме, воспользуйтесь готовыми выводами. А для любителей во всем докапываться до сути в конце приведены подробные объяснения причин такого поведения EPOC.

Вывод первый
В одном каталоге на диске псиона нельзя создать больше чем 256 файлов, в именах которых совпадают не менее пяти первых символов. Тем не менее, если на Compact Flash карту эти файлы записаны с помощью CF Reader-а, подключенного к настольному компьютеру или каким-то другим способом, то проблем с доступом к этим файлам не возникает.

Вывод второй
Если работая на Псионе создать на CF-карте файлы, в именах которых встречаются русские буквы, то вставив эту карту в CF Reader, подключенный к настольному компьютеру, Вы ничего не сможете сделать с этими файлами. Даже стереть. Впрочем, вставив эту же карту обратно в Псион, Вы обнаружите, что все файлы снова нормально читаются. Аналогично наоборот. Файлы названные по-русски, созданные с помощью CF Reader-а, не будут доступны на Псионе.

Это были выводы в готовом виде. Собственно на этом можно прекращать чтение. Все важное я уже написал. Дальнейшее предназначено для тех, кому интересно подробное объяснение почему именно так происходит.

Объяснения
Началось все с того, что мне захотелось прочитать про PHP. Надо же самообразованием заниматься. Если кто не в курсе, это такой язык программирования, на котором сайты пишут. Подробностей не знаю, поскольку пока не прочитал - с Псионом боролся ;-))
Скачал я документацию и оказалось, что хоть общий ее объем всего около трех мегабайт, состоит она из 1601 файла. Ну какая мне разница сколько там файлов. Запустил ее переписывание и занялся другими делами.

Через некоторое время оказалось, что после переписывания примерно трех сотен файлов (на что ушло около часа) процесс ломается. У меня первое время все переписывалось через инфракрасный порт, так там просто связь разрывалась. Потом, правда, можно было сказать "retry", связь восстанавливалась и PsiWin сообщал о том, что файл с таким именем уже существует и предлагал его перезаписать.

Сначала я подумал, что это обычные глюки PsiWin-а при переписывании такого большого количества файлов и решил их обойти. Упаковал все обратно в один Zip, переписал на Псион и стал распаковывать с помощью RMRZip-а. Скорость работы этой программы заслуживает отдельных и далеко не лестных слов, но речь сейчас не о ней. Распаковка шла более чем не быстро и где-то через полчаса появилось сообщение "Already exists". При этом в каталоге, куда шла распаковка, оказалось тоже около 300 файлов.

Тут уж возникли серьезные подозрения, что дело не чисто. Пришло время просить помощи. Написал я о своих проблемах в конференцию на сайте mypsion.ru. В ответ вебмастер этого сайта King Midas прислал совет переформатировать флеш карту и комплект программ Essential Disk Utilities, с помощью которого это можно было бы сделать. Переформатирование не помогло. Эффект в точности воспроизвелся. Но в так любезно присланном комплекте программ оказалась одна - Disk Editor, которая помогла разобраться в причинах этого странного глюка.

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

Не знаю как на "встроенном диске", а на CF используется файловая система по имени FAT, точнее ее модернизированный вариант VFAT, и это важно. FAT - это очень простая и древняя файловая система. Ее основное и единственное преимущество состоит в том, что работать с ней умеют практически все операционные системы. Поэтому не удивительно, что для хранения файлов на CF была выбрана именно она - совместимость со всем чем угодно обеспечивается автоматически. VFAT это модернизация FAT. Эта файловая система характерна тем, что в отличие от FAT, в которой имена файлов лежат в древнем DOS формате - 8.3 (8 символов имя и 3 расширение), она умеет хранить так называемые длинные имена длиной до 260, кажется, символов. При этом изменения в самой файловой системе минимальны. Даже те программы, которые ничего не знают про VFAT, могут работать с ней как с FAT и при этом ничего (почти) не портится. Чтобы обеспечить такую степень совместимости со старыми программами, для каждого файла формируются наряду с "новыми" - длинными также и "старые" - короткие имена в формате 8.3, причем именно короткое имя и идентифицирует однозначно файл. Длинное имя служит чем-то вроде комментария, который может быть, а может и отсутствовать.

Так вот, проблема в том, что в описании PHP есть масса файлов с длиными именами типа function.array-merge-recursive.html. Причем файлов, начинающихся на function, несколько сотен. Вероятно, по числу функций в этом языке.

Для файлов с длинными именами EPOC, как и любая другая ОС работающая с VFAT, формирует также и короткие имена. А вот правила формирования коротких имен уже свои в каждой операционной системе. Единственное обязательное условие - сгенерированные короткие имена файлов должны быть уникальными в пределах одного каталога. В EPOC короткие имена формируются по простому правилу - отбрасываются символы имени начиная с девятого и символы расширения начиная с четвертого. Полученное имя в формате 8.3 переводится в заглавные буквы, и короткое имя готово. Но что делать, если в один каталог записывается несколько файлов, первые 8 символов в именах которых совпадают? Ведь короткие имена должны быть уникальными!

В этом случае берутся первые 6 символов имени, к ним добавляется символ тильда (~), а потом порядковый номер на тот случай, если встретится еще одни файл с таким же началом. То есть из того имени, которое я привел раньше, получается FUNCTI~0.HTM, Следующий будет называться FUNCTI~1.HTM и так долее до FUNCTI~9.HTM. Потом будет FUNCTI~A.HTM и далее до FUNCTI~F.HTM. Таким образом, получили 16 разных имен файлов. Если встречается 17-й файл, начинающийся на Func..., то забирается еще одна буква из имени. Имя очередного файла будет FUNCT~10.HTM и так далее до FUNCT~FF.HTM, что дает возможность разместить в одном каталоге 256 файлов, начинающихся на Funct... К сожалению, на этом фантазия разработчиков EPOC закончилась. Ситуции, когда в одном каталоге находится более 255 файлов, имена которых начинаются одинаково, они не предусмотрели.

То есть 257-е короткое имя генерится, вероятно, опять как FUNCTI~0 и получается, что такой файл уже есть.

Windows 98, например, не связывается с шестнадцатиричной системой счисления. Там число, приписываемое к короткому имени для обеспечения его уникальности, десятичное и не ограниченное двумя символами. Сколько символов надо, столько и используется.
Как я уже писал, все это выяснилось с помощью любезно предоставленной KM программки Disk Editor из комплекта EDU.

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

В VFAT длинные имена положено хранить в двухбайтной кодировке по имени UNICODE. Для кодовой страницы 1252, которая используется в большинстве европейских стран и в Америке, код UNICODE для символов, которые могут встретиться в имени файла, получается простым добавлением нуля. А вот русские буквы имеют префикс уже не 00, а 04 и даже младший байт не совпадает с кодом в кодировке CP1251. Судя по всему, разработчики EPOC не подумали о поддержке других кодовых страниц, а наши разработчики русификаторов не смогли справиться с отсутствием такой поддержки. В результате, длинные имена Псион пишет не в UNICODE, а в некой "особой" кодировке, где коды русских букв получаются также как и латинских - добавлением нулевого байта. Естественно, о такой кодировке ни одна другая операционая система не знает. Как следствие, CF карточки с файлами, в именах которых встречаются русские буквы, записанные на PC-шных CF-ридерах, не читаются на Псионах и наоборот. Точнее, имена файлов будут видны не правильно и работать с ними будет невозможно.

Более того, короткие имена тоже пишутся не правильно. На FAT короткие имена должы быть записаны в кодировке OEM, в случае русского языка это CP866, но Psion, русифицированный с помощью RusPsion, их пишет все равно в 1251. То есть короткие имена тоже читаться не будут. Не знаю точно как поступает Эльбрус, но похоже, что точно так же.

Вот, собственно, и все, чем мне хотелось поделиться с общественностью, по поводу особенностей файловой системы EPOC и ее локализации.

В этой статье есть неточности. Некоторые из них допущены намеренно, поскольку совсем уж строгое изложение ничего не прибавит к пониманию обсуждаемых проблем, но сильно раздует материал ненужными подробностями. А какие-то, возможно, следствие моего непонимания каких-то вещей. Если вы заметите неточности второго типа, пишите мне. Я постараюсь исправить все существенные недоработки.

Юзер, Просто Юзер.

Дата статьи: 17 февраля 2001 г

« Назад в каталог | Обсудить в конференции »
[На главную] [Обновления] [Новости] [Клуб] [Обзоры программ] [Советы] [Обзоры железа] [SIBO] [Конференция] [Статьи] [Базы] [Ссылки] [Поиск]