Типы файлов

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

Файлы содержат данные, сценарии оболочки или программы. Кроме того, некоторые файлы представляют такие абстрактные объекты, как сокеты, каналы и драйверы устройств.

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

В журнализированных файловых системах (JFS и JFS2) файлы представляются с помощью дисковых индексных узлов (i-узлов). В i-узле хранится информация о файле (принадлежность, режимы доступа, время доступа, адреса данных и время изменения).

Журнализированная файловая система поддерживает следующие типы файлов:

Типы файлов, поддерживаемые журнализированной файловой системой
Тип файла Имя макрокоманды, используемое в mode.h Описание
Обычный S_ISREG Последовательность байтов с одним или несколькими именами. Обычные файлы могут содержать текстовые или двоичные данные. Это файлы прямого доступа; операция чтения или записи может выполняться для любого байта в файле.
Каталог S_ISDIR Содержит записи каталога (пары "имя файла - i-номер"). Форматы каталогов определяются файловой системой. Процессы могут выполнять чтение каталогов аналогично чтению обычных файлов, однако право записи в каталоги зарезервировано за ядром. Для работы с записями каталогов предназначены специальные функции.
Специальный блоковый файл S_ISBLK Связывает структурированный драйвер устройства с именем файла.
Специальный символьный файл S_ISCHR Связывает неструктурированный драйвер устройства с именем файла.
Конвейеры S_ISFIFO Обозначает канал для связи между процессами (IPC). Именованные каналы создаются функцией mkfifo. Функция pipe создает каналы без имени.
Символьные связи S_ISLNK Файл, содержащий абсолютный или относительный путь к другому файлу.
Сокеты S_ISSOCK Механизм IPC для обмена данными между процессами. Для создания сокетов предназначена функция socket, а для задания их имен - функция bind.

Максимальный размер обычного файла в файловой системе JFS с поддержкой больших файлов составляет около 64 Гб (68 589 453 312). В файловых системах с поддержкой больших файлов и файловых системах JFS других типов максимальный размер файлов, не относящихся в предыдущей таблице к обычным файлам, составляет 2 Гб -1 (2147483647). Максимальный размер файла в JFS2 ограничен размером файловой системы.

Ограничение на размер файловой системы JFS2, установленное в архитектуре, составляет 2 52 байт (4 петабайта). Максимальный размер файловой системы, поддерживаемый 64-разрядным ядром - 244 - 4096 байт, то есть немного меньше 16 терабайт.

Максимальная длина имени файла - 255 символов, максимальная длина полного имени - 1023 байта.

Работа с файлами

В операционной системе предусмотрено множество функций для работы с файлами. Ниже приведено краткое описание наиболее часто используемых функций:

Функции для создания файлов

Для создания файлов применяются следующие функции:
creat
Создает новый пустой обычный файл
связь
Создает дополнительное имя (запись каталога) для существующего файла
mkdir
Создает каталог
mkfifo
Создает именованный канал
mknod
Создает файл устройства
open
Создает новый пустой файл, если установлен флаг O_CREAT
pipe
Создает IPC
socket
Создает сокет

Функции для управления файлами (программирования)

Для управления файлами предусмотрены следующие функции:
access
Определяет, доступен ли файл.
chmod
Изменяет режим доступа к файлу.
chown
Изменяет принадлежность файла.
close
Закрывает дескрипторы открытых файлов (включая сокеты).
fclear
Освобождает место в файле.
fcntl, dup или dup2
Управляют дескрипторами открытых файлов.
fsync
Записывает внесенные в файл изменения на диск.
ioctl
Управляет функциями, связанными с дескрипторами открытых файлов, включая специальные файлы, сокеты и средства поддержки устройств, такие как общий интерфейс терминала termio.
lockf или flock
Управляют дескрипторами открытых файлов.
lseek и llseek
Перемещает указатель ввода/вывода в открытом файле.
open
Возвращает дескриптор файла, который используется другими функциями для ссылки на открытый файл. Операция open позволяет получить имя файла и значение режима доступа, которое указывает, в каком режиме открывается файл: для чтения, записи или для чтения/записи.
read
Считывает данные из открытого файла, если функцией open был установлен соответствующий режим доступа (O_RDONLY или O_RDWR).
rename
Изменяет имя файла.
rmdir
Удаляет каталоги из файловой системы.
stat
Возвращает информацию о состоянии файла (в том числе имя владельца и режимы доступа).
truncate
Изменяет длину файла.
write
Записывает данные в открытый файл, если функцией open был установлен соответствующий режим доступа (O_WRONLY или O_RDWR).

Дополнительная информация о типах и характеристиках файловых систем приведена в главе Файловые системы в книге Управление операционной системой и устройствами.