20.3.1. Unix-файл представляет собой только большой блок байтов

20.3.1. Unix-файл представляет собой только большой блок байтов

Любой файл в Unix представляет собой только большой блок байтов без каких-либо других атрибутов. В частности, не существует возможности сохранять за пределами данных файла информацию о его типе или указатель на связанную прикладную программу.

В более широком смысле все рассматривается как поток байтов. Даже аппаратные устройства являются потоками байтов. Данная метафора была большим успехом ранней Unix и большим преимуществом в мире, где (например) компилируемые программы не могли осуществлять вывод, который мог бы быть отправлен обратно компилятору. Из данной метафоры выросли каналы и shell-программирование.

Однако метафора байтового потока в Unix настолько существенна, что в Unix имеются проблемы при интеграции программных объектов с операциями, которые не вписываются в байтовый поток или файловый состав операций (создание, открытие, чтение, запись, удаление). Это особенно является проблемой для GUI-объектов, таких как пиктограммы, окна и "активные" документы. Внутри классической Unix- модели мира единственный способ расширить существующую метафору байтового потока заключается в использовании вызовов ioctl, печально известных как уродливая коллекция лазеек в пространство ядра.

Приверженцы операционных систем семейства Macintosh склонны громогласно критиковать это. Они пропагандируют модель, в которой одно имя файла может иметь как "ветвь" данных, так и "ветвь" ресурсов. Ветвь данных соответствует байтовому потоку в Unix, а "ветвь" ресурсов является семейством пар имя/значение. Приверженцы Unix предпочитают такие подходы, которые делают данные файла самоописательными, так чтобы фактически те же метаданные хранились внутри файла.

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

С другой стороны, поддержка файловых атрибутов сопряжена с трудными вопросами о том, какие файловые операции должны их сохранять. Очевидно, что при копировании именованного файла в другой именованный файл должны также копироваться атрибуты файла источника, как и его данные. Однако что произойдет, если файл был перенаправлен в новый файл с помощью команды cat(1)?

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

Разработчики файловой системы Xerox PARC боролись с данной проблемой в 70-х годах прошлого века. Для конструкции был характерен "открытый сериализованный" вызов, который возвращал байтовый поток, содержащий как атрибуты, так и содержимое файла. Если вызов применялся к каталогу, то он возвращал сериализацию атрибутов каталога плюс сериализацию всех файлов, хранящихся в нем. Не заметно, чтобы этот подход когда-либо был усовершенствован.

Ядро 2.5 Linux уже поддерживает присоединение подобных пар имя/значение как свойств имени файла, однако на момент написания данной книги эта возможность еще широко не использовалась в приложениях. Последние версии операционной системы Solaris имеют приблизительно эквивалентную функцию.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Будьте собой

Из книги Getting Real (на русском) [вычитывается] автора 37signals

Будьте собой Дифференцируйте себя от больших компаний, будьте дружественнее и доступнееМного маленьких компаний делают ошибку в попытках действовать как большие. Как будто бы они не замечают свой размер. Это как слабость, комплекс, который нужно скрывать, и это слишком


Что представляет собой база данных

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

Что представляет собой база данных База данных (database) — это своего рода камера хранения информации. Поскольку существуют различные типы баз данных, необходимо отметить, что в данной книге рассматриваются реляционные базы данных, как самый распространенный в настоящее


Сколько байтов адресуют 64 разряда

Из книги Основы AS/400 автора Солтис Фрэнк

Сколько байтов адресуют 64 разряда Ответ: 16 экзабайтов, что равно примерно 18,4 квинтиллионам байтов (или точнее 18 446 744 073 709 551 616 байтов).Большинство людей не в состоянии представить себе такое число. Как я уже упоминал, число байтов, которые могут быть адресованы с помощью 48


Что берем с собой?

Из книги Популярный самоучитель работы в Интернете автора Кондратьев Геннадий Геннадьевич

Что берем с собой? В состав обозревателя Интернета входят следующие программы.– Браузер Internet Explorer (IE)[26] . С его помощью мы будем просматривать веб-страницы во всем их многообразии и великолепии.– Outlook Express (OE). С помощью этой программы мы будем работать с почтой и группами


Урок 12 Ловись файл, большой и маленький

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

Урок 12 Ловись файл, большой и маленький Рыбак рыбака видит издалека. И тут же отводит от прикормленного места. Рыбацкое правило Как мы уже выяснили, в Интернете полным-полно всяческих файлов, как полезных, так и вредных, как нужных, так и не очень. Не буду утверждать, что


20.3.1. Unix-файл представляет собой только большой блок байтов

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

20.3.1. Unix-файл представляет собой только большой блок байтов Любой файл в Unix представляет собой только большой блок байтов без каких-либо других атрибутов. В частности, не существует возможности сохранять за пределами данных файла информацию о его типе или указатель на


Что представляет собой спам и как с ним бороться?

Из книги Веб-Самоделкин. Как самому создать сайт быстро и профессионально автора Гладкий Алексей Анатольевич

Что представляет собой спам и как с ним бороться? Трудно найти в настоящее время пользователя, который бы не был наслышан о проблеме спама. Что же представляет собой спам, откуда он берется, как его распознать и как можно от него защититься?Спам представляет собой один из


Что представляет собой современный веб-сайт?

Из книги Ководство автора Лебедев Артём Андреевич

Что представляет собой современный веб-сайт? Итак, что же представляет собой современный веб-сайт? На этот вопрос мы попытаемся ответить в данном разделе.Очень многое зависит от того, кто и с какой целью создал сайт, каково его информационное наполнение, выполнена ли


§ 84. Сколько байтов в килобайте?

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

§ 84. Сколько байтов в килобайте? Алиса. Меня зовут Алиса? Шалтай-Болтай. Какое глупое имя! Что оно значит? Алиса. Разве имя должно что-то значить? Шалтай-Болтай. Конечно, должно! Возьмем, к примеру, мое имя — оно выражает мою суть! Замечательную чудесную суть! А с таким именем,


17.5.1. Упорядочение байтов

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

17.5.1. Упорядочение байтов Сети TCP/IP, как правило, являются неоднородными; они включают в себя широкий ряд механизмов и архитектур. Одно из основных отличий между архитектурами связано со способом хранения чисел.Машинные числа составляются из последовательности байтов.


Порядок следования байтов

Из книги UNIX — универсальная среда программирования автора Пайк Роб

Порядок следования байтов Порядок следования байтов (byte ordering) — это порядок, согласно которому байты расположены в машинном слове. Для разных процессоров может использоваться один из двух типов нумерации байтов в машинном слове: наименее значимый (самый младший) байт


Порядок байтов в ядре

Из книги автора

Порядок байтов в ядре Для каждой аппаратной платформы, которая поддерживается ядром Linux, в файле <asm/byteorder.h> определена одна из двух констант __BIG_ENDIAN или __LITTLE_ENDIAN, в соответствии с используемым порядком байтов.В этот заголовочный файл также включаются макросы из