Лучшие вопросы
Таймлайн
Чат
Перспективы

Файл

основная единица хранения двоичных данных Из Википедии, свободной энциклопедии

Remove ads

Файл (англ. file) — абстракция операционной системы, упакованный стандартизированным образом набор данных, доступ к которому осуществляется средствами файловых API[1]. Файл может быть записан на носитель информации, передан по каналам связи или получен иным способом, например из другого файла, но вне зависимости от этого операционная система предоставляет стандартные средства для манипулирования файлами, отделяющие доступ к файлу от реализации хранилища файлов[2].

Хранение файлов на носителях информации реализуется посредством файловых систем. Файловая система представляет собой специализированную базу данных, предназначенную для хранения файлов. Для однозначного доступа к файлу файловые системы присваивают файлам имя, а также (в большинстве иерархических файловых систем) путь[2]. Также файловые системы могут ассоциировать с файлом метаданные, также называемые атрибутами — вспомогательные данные о файле. Метаданные могут включать информацию о внутренней структуре файла и правилах его обработки (тип файла), разрешения на выполнение тех или иных операций с файлами (чтение, запись, исполнение как программы) в том числе для отдельных пользователей и групп, метки времени и т.д.

Многие операционные системы приравнивают к файлам и обрабатывают сходным образом и другие ресурсы; наиболее широкое использование понятия файла характерно для Unix-подобных операционных систем, реализующих концепцию «всё есть файл» (англ. everything is a file). В них файлами считаются также физические устройства (порты или принтеры), виртуальные устройства (/dev/null, /dev/random, /dev/urandom и другие), потоки данных (например, именованные каналы), сетевые ресурсы, сокеты.

Remove ads

История

Суммиров вкратце
Перспектива
Thumb
Файл перфокарт
Thumb
Два жёстких диска машины IBM 305[англ.]

Слово англ. file происходит от лат. filum («нить, струна»)[3].

Слово англ. file впервые применено к компьютерной системе хранения в 1950 году. Реклама памяти на запоминающих ЭЛТ фирмы RCA в журнале Popular Science[4] гласила:

…результаты бесчисленных вычислений можно держать «в картотеке» (англ. on file) и получать снова. Эта «картотека» теперь существует в запоминающей трубке, разработанной в лабораториях RCA. Она электрически сохраняет цифры, отправленные в вычислительную машину, и держит их в хранилище, заодно запоминая новые — ускоряя интеллектуальные решения в лабиринтах математики.

В 1952 году слово file отнесли к колоде перфокарт[5]. Поначалу словом file называли само устройство памяти, а не его содержимое (регистровый файл). Например, диски IBM 350, использовавшиеся, например, в машине IBM 305, назывались disk files[6]. Системы наподобие Compatible Time-Sharing System ввели концепцию файловой системы, когда на одном запоминающем устройстве существует несколько виртуальных «устройств памяти», что и дало слову «файл» современное значение. Имена файлов в CTSS состояли из двух частей, «основного имени» и «дополнительного имени» (последнее существует до сих пор как расширение имени файла)[7][8].

Remove ads

Концепция

Суммиров вкратце
Перспектива

Операционные системы как правило предоставляют доступ к файлу на двух уровнях абстракции:

Закрытый файл

Не будучи открытым, файл является атомарным объектом файловой системы. Данный уровень скрывает как физическую реализацию файла — в каком месте на носителе он расположен, какие команды нужно подать, чтобы его считать, проверить на наличие повреждений и т.д., — так и его внутреннее содержание. На этом уровне абстрации можно найти файл по имени, проверить его метаданные, а также произвести над ним какие-либо операции — скопировать, переименовать, изменить путь к файлу, удалить, а также открыть файл, получив доступ к следующему уровню абстракции.

Открытый файл

После открытия файл предоставляет доступ к своему содержимому. Доступ может быть осуществлён разными способами:

  • Копирование содержимого файла в оперативную память. Такой способ хорошо работает с небольшими по размеру файлами, однако при большом размере файла памяти может быть недостаточно, либо сама по себе загрузка файла может занять много времени. Кроме того, изменения, внесённые извне не сразу становятся доступны — для этого программа должна подписаться на событие, сигнализирующее об изменении файла и перечитывать файл.
  • Отображаемый в память файл — более совершенный способ, доступный для архитектур, поддерживающих виртуальную память. В этом случае файл может быть загружен в память не сразу и не целиком, подгружаясь по мере необходимости и производя запись в файл при записи в соответствующие ячейки памяти.
  • Последовательное чтение/запись — в этом случае после открытия файла и опционально — указания на конкретное место, с которого нужно начинать чтение или запись (операция seek), производится чтение/запись содержимого файла по одному символу. Если достигнут конец файла, очередная операция чтения возвращает маркер конца файла, либо вызывает исключение. При записи, если достигнут конец файла, его размер увеличивается на размер записи. Такой способ доступа к файлам удобен для файлов, имеющих последовательную природу — видео- и аудиозаписей, журналов.
  • Произвольный доступ, позволяющий при каждой операции чтения или записи указывать конкретное место, к которому происходит обращение. Как правило, такой способ доступа используется для работы с большими файлами, имеющими сложную структуру — например, с базами данных.

При открытии файла необходимо указать способ доступа и какие операции над файлом будут производиться (чтение, перезапись, дополнение в конец). Система проверяет наличие у запустившего процесса прав на запрошенную операцию. Если проверка прав прошла успешно, система предоставляет интерфейс для доступа к файлу. Чаще всего в современных ОС используется так называемый дескриптор файла — уникальный идентификатор, по которому система распознаёт обращение к конкретному файлу. После завершения всех операций файл полагается закрыть, чтобы закончить все операции записи и предоставить доступ к файлу другим процессам, если не разрешено совместное использование файла.

По содержимому файлы иногда условно делят на текстовые и двоичные. Текстовыми называют файлы, в которых закодирован текст в ASCII или аналогичной кодировке, что делает его условно человеко-читаемым, в то время как двоичными называют все остальные типы файлов. Некоторые операционные системы могут также поддерживать особые разновидности файлов — файлы, разбитые на блоки фиксированной длины (как правило, 80 или 132 символа) — для совместимости с системами считывания перфокарт, а также файлы с внутренней иерархической структурой, распознаваемой файловым API — последние используются в некоторых операционных системах мейнфреймов.

Remove ads

Метаданные файлов

Суммиров вкратце
Перспектива

Имя файла

В большинстве файловых систем имя файла используется для указания, к какому именно файлу производится обращение. В различных файловых системах ограничения на имя файла сильно различаются: может поддерживаться различная максимальная длина как имени файла, так и пути к нему, могут быть запрещены те или иные символы. Как правило, имя файла должно быть уникальным в пределах одного каталога, при этом некоторые файловые системы могут считать заглавные и строчные буквы одним и тем же символом, другие — нет. Также ограничения на имена файлов могут быть обусловлены не файловой, а операционной системой, например Windows не позволяет создать на любой файловой системе файлы со спецсимволами >, <, |, ?, *, /, \, :, " в названии, даже если они экранированы, а также зарезервированные имена устройств, однако в Linux запрещены только / и нулевой символ — также на любой файловой системе.

В некоторых файловых системах можно создавать и использовать файлы без имени. Такие файлы всегда являются временными[источник?]. Их основные преимущества: при создании не может возникнуть конфликта имён и их нельзя найти в их каталоге по имени. В остальном это полноценные файлы.

Тип файла

Тип файла — это информация о его внутренней структуре и способе обработки. Существуют несколько способов определения типа файла:

  • С помощью расширения — части имени файла, отделённого от названия точкой. Иногда практикуется указание нескольких расширений для одного файла, например .tar.bz — означает, что файл является архивом (.tar), сжатым с помощью алгоритма bzip. Соответственно, чтобы открыть этот файл, нужно сначала распаковать его утилитой bzip, а затем — открыть с помощью утилиты tar.
  • С помощью специального поля, содержащего тип файла. Несмотря на то, что с точки зрения конечного пользователя расширение в файловых системах FAT и NTFS ведёт себя как часть имени файла, на самом деле оно хранится в отдельном поле.
  • Через MIME-тип. Данный способ определения типа файла распространён при передаче файлов через системы электронной почты и интернет. Браузеры и почтовые клиенты игнорируют расширения файлов, определяя тип открываемого файла именно через механизм MIME.

Основные атрибуты

В некоторых файловых системах, таких как NTFS, предусмотрены атрибуты (обычно это бинарное значение «да»/«нет», кодируемое одним битом). Во многих современных операционных системах атрибуты практически не влияют на возможность доступа к файлам, для этого в некоторых операционных и файловых системах существуют права доступа.

Подробнее Название атрибута, Перевод ...

Время

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

Владелец и группа файла

В некоторых файловых системах предусмотрено указание на владельца файла и группу-владельца.

Права доступа

В некоторых файловых системах предусмотрена возможность для ограничения доступа пользователей к содержимому файла. В Unix-подобных операционных системах для файлов ранее обычно выделяли три типа прав: на запись, чтение и выполнение. Каждое право задаётся раздельно для владельца, для группы и для всех остальных. ACL позволяет использовать более детальное разделение и прав, и пользователей.

В операционных системах Windows NT при работе с файловой системой NTFS права́ доступа задаются явно для пользователей или групп или наследуются от вышестоящих объектов. Права́ в себя включают право на чтение, запись, исполнение, удаление, смену атрибутов и владельца, создание и удаление подпапок (для папок) и чтение прав доступа и другие как в POSIX. Каждое право может быть задано как разрешением, так и запретом. Запрет имеет больший приоритет, чем разрешение в отличие от POSIX.

Remove ads

Особые разновидности файлов

  • Каталог (он же — папка или директория) — необходим для группировки файлов и организации их в иерархическую структуру. Файл может находиться в корне файловой системы, либо привязан к одному из каталогов (в случае поддержки файловой системой жёстких ссылок — и к нескольким). Как правило операционная система позволяет при выбрать какой-либо каталог как «текущий», в этом случае файлы, относящиеся к этому каталогу доступны просто по имени, а для доступа к другим файлам необходимо указать последовательность каталогов, ведущих к ним (так называемый путь) либо от текущего каталога (относительный путь), либо от корня файловой системы (абсолютный путь).
  • Архив — в отличие от каталогов, архив сам представляет собой файл, непосредственно содержащий в себе другие файлы. Проще говоря, архив — это подобие файловой системы, заключённой внутри файла, однако в отличие от образов, эта система не предназначена для развёртывания на носителе информации. Архивы как правило используются для хранения файлов и каталогов в сжатом виде.
  • Символьная ссылка — файл, ссылающийся на другой файл, позволяющий (с некоторыми ограничениями) работать с ним как с исходным файлом.
  • Файлы устройств — не являются настоящими файлами, однако позволяют использовать для ввода-вывода те же API операционной системы, что и для работы с файлами. В CP/M, DOS и Windows таких устройств минимум — это CON (для доступа к клавиатуре и вывода текста в эмулятор терминала), NUL (пустое устройство), а также устаревшие COM1 — COM4 (RS-232) и LPT1 — LPT4 (IEEE 1284). В unix-подобных ОС через подобные файлы можно получить доступ к большинству аппаратных ресурсов. В них файлы устройств находятся в специальном каталоге (/dev/), и бывают двух типов: символьные (поддерживающие только последовательный ввод-вывод) и блочные.
  • Именованные каналы предназначены для взаимодействия между процессами, однако используют те же API, что и для работы с файлами. Таким образом, если один процесс производит запись в канал как в файл, другой процесс может прочитать эти данные как из файла.
Remove ads

Примечания

Литература

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads