Введение

Типы файлов в операционных системах Unix
Семь стандартных типов файлов Unix — это обычный файл, каталог, символическая ссылка, именованный канал (FIFO), блочное устройство, символьное устройство и сокет, как определено стандартом POSIX. Различные операционные системы могут поддерживать больше типов, чем требуется POSIX (например, двери Solaris). Тип файла можно определить с помощью команды `ls -l`, которая отображает его в первом символе поля прав доступа к файлу. Для обычных файлов Unix не определяет и не предоставляет никакой внутренней структуры; поэтому их структура и интерпретация полностью зависят от программного обеспечения, которое их использует. Однако, команда `file` обычно может быть использована для определения типа данных, содержащихся в файле.

Числовое

В структуре stat тип файла и разрешения (режим) хранятся вместе в битовом поле, размер которого составляет не менее 12 бит (3 бита для указания типа среди семи возможных типов файлов; 9 бит для разрешений). POSIX определяет, что размещение разрешений занимает младшие 9 бит, а остальная часть не определена. Тип файла можно проверить с помощью макросов, таких как S_ISDIR. Обычно такая проверка выполняется путем маскировки режима с помощью S_IFMT (часто октальное число "170000" для 4-битной конвенции) и проверки, соответствует ли результат значению S_IFDIR. S_IFMT не является базовой концепцией POSIX, а является расширением X/Open System Interfaces (XSI); системы, соответствующие только стандарту POSIX, могут использовать другие методы. Это относится к формату вывода в длинном формате (опция l). В частности, первое поле (до первого пробела) называется "строкой режима файла", например, drwxr-xr-x. Первый символ описывает тип файла, в данном случае d (каталог). Остальная часть этой строки указывает разрешения файла.

Примеры реализации

Версия GNU coreutils ls использует вызов функции filemode, функции glibc (предоставленной в библиотеке gnulib), для получения строки режима. FreeBSD использует более простой подход, но поддерживает меньшее количество типов файлов.

Символическая связь

Символическая ссылка — это указатель на другой файл. Этот специальный файл хранится как текстовое представление пути к целевому файлу (что означает, что путь может быть относительным или целевой файл может вообще не существовать). Символическая ссылка обозначается буквой «l» (строчной L) в качестве первого символа строки прав, например, в сокращенном выводе команды `ls -l`:

lrwxrwxrwx termcap -> /usr/share/misc/termcap
lrwxrwxrwx S03xinetd -> /init.d/xinetd

FIFO (названная труба)

Одной из сильных сторон Unix всегда была межпроцессная связь. Среди средств, предоставляемых ОС, есть каналы, которые соединяют выход одного процесса с входом другого. Это подходит, если оба процесса существуют в одном и том же родительском пространстве процессов, запущенном одним и тем же пользователем, но есть ситуации, когда взаимодействующим процессам необходимо использовать FIFO, которые здесь называются именованными каналами. Одна из таких ситуаций возникает, когда процессы должны выполняться под разными именами пользователей и с разными правами доступа. Именованные каналы – это специальные файлы, которые могут существовать в любой точке файловой системы. Их можно создать с помощью команды mkfifo, например, так: mkfifo mypipe. Именованный канал обозначается буквой "p" в начале строки прав, например, в сокращенном выводе команды ls -l:

prw-rw---- mypipe

Включатель

Сокет — это специальный файл, используемый для межпроцессного взаимодействия, который обеспечивает связь между двумя процессами. Помимо передачи данных, процессы могут передавать файловые дескрипторы через соединение сокета домена Unix, используя системные вызовы sendmsg и recvmsg. В отличие от именованных каналов, которые обеспечивают только однонаправленный поток данных, сокеты поддерживают полнодуплексную связь. Сокет обозначается буквой "s" в начале строки прав, например:

srwxrwxrwx /tmp/.X11 unix/X0