Введение
Типы файлов в операционных системах Unix
Семь стандартных типов файлов Unix — это обычный файл, каталог, символическая ссылка, именованный канал (FIFO), блочное устройство, символьное устройство и сокет, как определено стандартом POSIX. Различные операционные системы могут поддерживать больше типов, чем требуется POSIX (например, двери Solaris). Тип файла можно определить с помощью команды `ls -l`, которая отображает его в первом символе поля прав доступа к файлу. Для обычных файлов Unix не определяет и не предоставляет никакой внутренней структуры; поэтому их структура и интерпретация полностью зависят от программного обеспечения, которое их использует. Однако, команда `file` обычно может быть использована для определения типа данных, содержащихся в файле.
The seven standard Unix file types are regular, directory, symbolic link, FIFO special, block special, character special, and socket as defined by POSIX. Different OS specific implementations allow more types than what POSIX requires (e. g. Solaris doors). A file's type can be identified by the ls l command, which displays the type in the first character of the file system permissions field. For regular files, Unix does not impose or provide any internal file structure; therefore, their structure and interpretation is entirely dependent on the software using them. However, the file command can usually be used to determine what type of data they contain.
Числовое
В структуре 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
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