Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ QNX6_часть 2.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
275 Кб
Скачать
☆

Файлы и каталоги в qnx4

Файл — это набор байтов, имеющих общие атрибуты:

  • имя файла;

  • идентификатор владельца и идентификатор группы;

  • атрибуты доступа (для владельца, для членов группы и для остальных пользователей);

  • метки времени (время создания файла, время последней модификации файла, время последнего доступа к файлу, время последней записи в файл);

  • тип файла;

  • другие атрибуты.

Имя файла с добавлением списка разделенных символом "/" каталогов, содержащих файл, начиная с корневого каталога, называется полным или путевым именем файла.

(Например, /usr/photon/bin/slideviewer. Здесь файл с именем slideviewer имеет путь /usr/photon/bin).

QNX обеспечивает поддержку следующих типов файлов:

  • обычные (регулярные) файлы;

  • каталоги;

  • жесткие ссылки;

  • символические ссылки;

  • именованные программные каналы (FIFO);

  • блок-ориентированные специальные файлы;

  • байт-ориентированные специальные файлы;

  • "Именованные специальные устройства".

Обычные (регулярные) файлы

Обычные файлы это последовательность байт, не имеющих предопределенной структуры. За интерпретацию содержимого обычных файлов отвечают конкретные приложения. В отличие от операционных систем семейства Windows, QNX узнает исполняемые файлы не по расширению (вроде .ехе), а по специальному атрибуту.

Каталоги

Каталоги – это обычные файлы, имеющие определенную структуру. Эта структура представляет собой набор записей, которые называют элементами каталога.

Первый элементом каталога всегда содержит файл с именем ".". Этот элемент ссылается на свой собственный каталог, указывая на соответствующую запись в родительском каталоге.

Второй элемент каталога всегда содержит файл с именем "..". Этот элемент ссылается на родительский каталог, а точнее на его первый элемент.

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

Каждый элемент каталога связывает имя некоторого файла со служебной информацией о нем, включающей ссылку на место физического хранения данных. Структура содержимого элемента каталогаследующая:

  • 16 байт для имени файла;

  • размер файла;

  • информация о физическом размещении содержимого файла на диске (указатель на метаданные – номер inode);

  • метки времени;

  • атрибуты доступа;

  • счетчик ссылок на физические данные;

  • тип файла;

  • статус ("закрыт" или "открыт").

Если длина имени какого-нибудь файла превысит 16 символов, то в файле /.inodes будет создана запись для этого файла, в которую переместится вся информация о файле, кроме имени. В файловой записи каталога останутся имя файла (теперь оно может достигать 48 символов) и, ссылка на запись в /.inodes. При длине имени более 48 до 505 символов часть имени файла начиная с 49 символа ОС помещает в файл .longfiienames.

Размещение регулярных файлов и каталогов на диске.

В QNX регулярные файлы и файлы каталога хранятся как последовательность экстентов. Экстент - это непрерывная последовательность блоков на диске.

Файлы, которые состоят только из одного экстента, хранят информацию об экстенте (указатель inode на экстент) в элементе каталога. Если файл состоит более чем из одного экстента, информация о расположении экстентов хранится в одном или более связных блоках экстентов (связные - имеющие прямые/обратные указатели inode). Каждый блок экстентов может содержать информацию не более чем о 60 экстентах.

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

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

Жесткие ссылки

Имя файла в каталоге жестко связано с метаданными (т.е. с содержимым, данными файла) через указатель inode, в то же время сами метаданные существуют независимо от того как их называют в файловой системе и не содержат ссылок на элемент каталога. Поэтому на одни и те же метаданные можно ссылаться из различных каталогов.

Если для одних и тех же физических данных существующего файла создается еще один элемент каталога, то эти дополнительные имена (т.е. элементы каталога) называют жесткими ссылками (или "жесткими связями").

Все жесткие ссылки абсолютно равноправны.

При создании жесткой ссылки, во-первых, информация о физическом размещении данных выносится в файл /.inodes, во-вторых, счетчик ссылок увеличивается на единицу. При удалении одной из жестких ссылок реально будет удален только соответствующий элемент каталога, а счетчик ссылок в inode-записи будет уменьшен на единицу. Созданная inode-запись сохраняется, пока существует файл, даже если счетчик стал равен единице и длина имени файла менее 16 символов. Как только счетчик достигнет значения "нуль", и inode-запись, и физические данные файла будут уничтожены (для уничтожения файла его статус файла должен иметь значение "закрыт").

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

  • . ("точка")

  • .. ("точка точка")

Имя файла "точка" соответствует текущему каталогу; "точка точка" соответствует каталогу, предшествующему текущему каталогу.

"Точка точка" для каталога "/" - это просто "/", - и подняться выше нельзч.

Символические ссылки

Символическая связь ("мягкая" ссылка) - это особый файл, который содержит в качестве данных имя пути. Когда символическая связь используется в запросе ввода/вывода - например, open(), - обозначение связи в имени пути заменяется ее "данными". Символическая связь является гибким средством для перенаправления пути и часто используется для создания множества путей к одному и тому же файлу. В отличие от жестких связей, символические связи могут выходить за пределы файловой системы, а также являться связями для каталогов.

Символическая ссылка это, по сути дела, текстовый файл, содержащий имя другого файла или каталога, к которому перенаправляются все запросы ввода/вывода.

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

В следующем примере каталоги //1/usr/fred и //2/usr/barney являются связями на один и тот же каталог, хотя они находятся в различных файловых системах, и даже на различных узлах (смотри следующую диаграмму). Это не может быть сделано с использованием жестких связей:

//1/usr/fred --> //2/usr/barney

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

//1/usr/eric/src/test.c --> //1/usr/src/game.c

Если вы хотите: Используйте утилиту: Создать символическую связь ln (с опцией -s) Удалить символическую связь* rm Узнать, является ли файл символической связью ls

* Помните, что удаление символической связи действует только на связь, а не на адресуемый объект

Так как создание «мягких» связей для каталогов создает опасность бесконечных циклов, число переходов по символиче­ским связям ограничено. (задается переменной SYMLOOP_MAX, определенным в заголовочном файле <limits .h>).

Именованные программные каналы (FIFO)

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

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

FIFO – это разновидность программных каналов, отличительной особенностями которых является то, что они являются именованными постоянными файлами и хранятся в каталогах файловой системы.

Блок-ориентированные специальные файлы

Блок-ориентированные специальные файлы ("блочные устройства") – это файлы, предназначенные для изоляции приложений от физических характеристик аппаратуры. Обмен данными с блочными файлами осуществляется блоками по несколько байт (например, при рабо­те с жестким диском размер блока обычно равен 512 байт). В QNX блок-ориентированные специальные файлы создаются не на диске, а в оперативной памяти при старте соответствующих драйверов.

Байт-ориентированные специальные файлы

Байт-ориентированные специальные файлы ("символьные устройства") — это файлы, аналогичные файлам «блочные устройства», с той разницей, что они обеспечивают интерфейс к аппаратуре, осуществляющей посимвольный ввод/вывод. (например, к таким, как последовательный порт, сетевая карта и т. п.)

Байт-ориентированные специальные файлы создаются драйверами при запуске.

"Named Special Device" — "именованные специальные устройства"

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

Обмен посредством этого типа файлов требует знания формата данных от всех участников обмена.