Типы файлов
Файл - это одномерный массив байтов, имеющий как минимум одну жесткую связь (имя файла). Файлы могут содержать информацию в двоичном или в текстовом (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 байта.
Работа с файлами
В операционной системе предусмотрено множество функций для работы с файлами. Ниже приведено краткое описание наиболее часто используемых функций:
Функции для создания файлов
Функции для управления файлами (программирования)
- 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).
Дополнительная информация о типах и характеристиках файловых систем приведена в главе Файловые системы в книге Управление операционной системой и устройствами.