18c0693f

Ввод/вывод в системе UNIX и локализация.


   Когда-нибудь здесь будет небольшая статься о вводе/выводе в системе UNIX. :-) Пока же читатель может посмотреть кучу специальной литературы. Например :

Робачевский А.М.

"Операционная система Unix"

СПб. Издательство BHV

Санкт-Петербург, 1997

ISBN 5-7791-0057-8

Andrei Robachevsky

Federal Centre RUNNet

e-mail:

phone: +7-812-2388598

fax: +7-812-2327622

    Здесь же кратко коснемся только проблем локализации ввода/вывода UNIX.

    Итак, цитируем :

    В UNIX существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами :

  • Обычный файл ( regular file )
  • Каталог ( directory )
  • Специальный файл устройства ( special device file )
  • FIFO или именованный канал ( named pipe )
  • Связь ( link )
  • Сокет

    Продолжаем цитировать :

    Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные файлы, исполняемые программы т.п.

    Из этого следует, что в общем случае   не существует никакого способа узнать не только кодировку, но даже тип

данных, содержащихся в файле.

    В принципе, существуют два основных способа определения содержимого файла (набора/потока данных) :

  • In-band - свединия о кодировке содержатся внутри

    файла

  • Out-band - сведения о кодироке содержатся снаружи, где-то в другом месте.
  •     Самый известный In-band способ - . Здесь кодировки и вид содержимого описываются явно, в полях Content-Type: text/plain; charset=koi8-r и Content-Transfer-Encoding: base64. Концепции MIME (описание типа) используются также в HTTP ().

        Также In-band сведения о содержимом и кодировках содержатся, например, в файлах Microsoft Word .DOC(с включенными OLE объектами), Windows .EXE и .DLL (ресурсы), e.t.c. К In-band методам можно отнести и разнообразные языки разметки (MARK-UP


    Languages), например тэг <LANG=> языка HTML 4.0 и XML или спецификацию языка в файлах .RTF.

        Теперь об Out-band (внешних) способах. К сожалению, в UNIX

    поддерживается простая однопотоковая концепция организации файла. Нет никаких ресурсных вилок, как в MacOS HFS, нет Meta Info как в OS/2 HPFS. Файл - это просто набор данных, имеющий имя (ну, еще даты создания/изменения/доступа, ну еще права доступа : rwxr-xr-x ). Без всяких "расширенных атрибутов".

        Проблема зашла так далеко, что в UNIX

    появилась специальная утилита file, которая "эвристическими методами" пытается определить тип содержимого.

        Единственный более-менее распространенным способом определения типа файла является расширение, то есть несколько конечных символов в имени

    файла после точки : ".txt". На самом деле, никакого стандарта на "расширения" в UNIX нет, так как точка : "." является допустимым символом имени. Так что вполне могут встретится имена типа "file.doc.tar.gz", "file............txt" или ".profile".

        Тем не менее, многие программы ориентируются именно на "расширения", особенно при переводе в MIME, например для простановки типа в HTTP ():



  • (/usr/local/etc/http/mime.types)


  • (sqiud-1.1.2x/include/mime.table)

  • (/usr/local/etc/lynx.cfg [SUFFIX])


  •     Насколько ненадежен этот метод, можно судить например по тому, что текстовый (!) файл "ls-lR.ftp.anu.edu.au" упорно интерпретируется как "audio/basic" и некоторые программы пытаются его "сыграть" ;-))

        Тем не менее, иногда этим можно пользоваться, например задавая определения типов (и многие другие атрибуты) для файлов текущего

    каталога, в файле ./.htaccess от apache

    ( модуль mod_mime ):

    AddType text/plain text

    AddEncoding    x-compress    Z

    AddIconByType        (TXT, icons/text.gif)         text/plain

    AddIconByEncoding  (COMP, icons/comp.gif) application/x-compress

    e.t.c.
    <


        Ну чем не Out-band метод ? Правда доступ к файлу в таком каталоге осуществлять придется только через HTTP от apache. ;-)

        Но продолжаем цитировать :

        Каталог: С помощью каталогов формируется логическое дерево файловой системы. Каталог - это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию - метаданные, позволяющие операционной системе производить операции над этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку сам файл не содержит информации о своем местонахождении.
        Файл в файловой системе имеет некоторое имя - последовательность символов. Когда-то считалось, что имя файла может состоять только из 7-bit ASCII символов. В случае же использования национальных символов для имени файла возникают проблемы. И в стандарте POSIX решения нет.

    Существующие способы определения кодировки символов в имени файла :

  • Файловая система поддерживает UNICODE, например в UTF-8 или UCS-2 :