Типы файлов
Категория: Файловая система | Автор: admin | 30-09-2009, 04:40 | Просмотров: 7024

В большинстве файловых систем поддерживается семь типов файлов:

  • обычные файлы;

  • каталоги;

  • файлы байт-ориентированных (символьных) устройств;

  • файлы блок-ориентированных (блочных) устройств;

  • сокеты;

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

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

В некоторых системах не реализована поддержка таких типов файлов, как сокеты или именованные каналы.

 

Обычные файлы

 

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

 

Каталоги

 

Каталог содержит именованные ссылки на другие файлы. Он создается командой mkdir и удаляется (если пустой) командой rmdir. Каталоги, в которых есть файлы, можно удалить командой rm -r.

Специальные ссылки ‘.’ и ‘..’ обозначают соответственно сам каталог и его родительский каталог. Их нельзя удалить. Поскольку у корневого каталога нет родителя, ссылка ‘..’ в нем эквивалентна ссылке ‘.’.

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

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

Ссылки такого рода обычно называют "жесткими", чтобы отличить их от символических ("мягких") ссылок, которые описаны ниже. Жесткие ссылки создаются командой ln, а удаляются командой rm.

Синтаксис команды ln легко запомнить, так как она повторяет работу команды ср. Команда

 

ср oldfile newfile

 

создает копию файла oldfile под именем newfile. Точно так же, команда

 

ln oldfile newfile

 

создает новую ссылку newfile на файл oldfile.

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

Файлы байт-ориентированных и блок-ориентированных устройств

 

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

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

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

В системе может присутствовать несколько однотипных устройств. Поэтому файлы устройств характеризуются двумя номерами: старшим и младшим. Старший номер устройства говорит ядру о том, к какому драйверу относится данный файл, а младший номер сообщает драйверу, к какому физическому устройству следует обращаться. Например, старший номер устройства 6 в Linux обозначает драйвер параллельного порта. Первый параллельный порт (/dev/lp0) будет иметь старший номер 6 и младший номер 0.

Некоторые драйверы используют младший номер устройства нестандартным способом. Например, драйверы накопителей на магнитных лентах часто руководствуются им при выборе плотности записи и для определения того, необходимо ли перемотать ленту после закрытия файла устройства. В некоторых системах "драйвер терминала" (который на самом деле управляет всеми последовательными устройствами) применяет младшие номера устройств для того, чтобы отличать модемы, используемые для вызова удаленных систем, от модемов, работающих на прием сообщений.

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

 

Сокеты

 

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

Несмотря на то что другие процессы распознают файлы сокетов как элементы каталога, процессы, не участвующие в соединении, не могут осуществлять над этими файлами операции чтения и записи. С сокетами работают система печати, система X Window и система Syslog.

 

Сокеты создаются с помощью системного вызова socket. Когда с обеих сторон соединение закрыто, сокет можно удалить посредством команды rm либо системного вызова unlink.

 

Именованные каналы

 

Подобно сокетам, именованные каналы обеспечивают взаимодействие двух процессов, выполняемых на одной машине. Именованные каналы создаются командой mknod, а удаляются командой rm.

 

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

 

Символическая, или "мягкая", ссылка обеспечивает возможность вместо путевого имени файла указывать псевдоним. Когда ядро сталкивается с символической ссылкой при поиске файла, оно извлекает из нее хранящееся в ней путевое имя. Различие между жесткими и символическими ссылками состоит в том, что жесткая ссылка — прямая, т.е. указывает непосредственно на индексный дескриптор файла, тогда как символическая ссылка указывает на файл по имени. Файл, адресуемый символической ссылкой, и сама ссылка физически являются разными объектами файловой системы.

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

Символическая ссылка может содержать либо абсолютное, либо относи­тельное путевое имя. Например, команда

 

In -s ../../ufs /usr/include/bsd/sys/ufs

 

связывает имя /usr/include/bsd/sys/ufs с каталогом /usr/include/ufs с помощью относительного пути. Каталог /usr/include можно переместить куда угодно, но символическая ссылка, тем не менее, останется корректной.

Остерегайтесь использовать обозначение ".." в путевых именах, включающих символические ссылки, поскольку по символическим ссылкам нельзя проследовать в обратном направлении. Ссылка всегда обозначает истинный родительский каталог данного файла или каталога. Например, в приведенной выше ссылке путь

 

/usr/include/bsd/sys/ufз/../param.h

 

раскрывается как

 

/usг/include/param.h

 

а не

 

/usr/include/bsd/sys/param.h

 

Распространенная ошибка — думать, будто первый аргумент команды ln -s как-то связан с текущим каталогом. На самом деле он не раскрывается командой ln, а записывается в символическую ссылку буквально.



 (голосов: 2)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page