Файл
Материал из Википедии — свободной энциклопедии
Файл (англ. file) — логический блок информации, хранимой на носителях информации.
Содержание |
[править] Проблема точного определения понятия файл
Так как в разных операционных системах обладает различным набором атрибутов, свойств и методов доступа, формулировка универсального определения, которое бы учитывало все особенности, сформулировано не было.
Вопрос «что такое файл?» неоднократно вызывал в эхо-конференции ru.os.cmp войны флейма, из-за чего попал в FAQ конференции с формулировкой [1]:
Q48: что такое файл?
A48: ОПЯТЬ?
Основные проблемы определений:
- файл — именованная область данных на диске: файл может не иметь имени, может не находиться на диске (быть файлом устройства, например), может не содержать в себе информации (быть нулевого размера или разреженным).
- файл — объект файловой системы: определение саморекуррентно (файловая система обычно опеределяется через понятие файл), кроме того возможны файлы, которые не являются объектами файловой системы (например, находясь на разделе, который не имеет файловой системы).
- файл — логический блок информации, хранимой на носителях информации: файл не обязательно является носителем информации (например, файл /dev/null в unix-системах принципиально не может содержать в себе информации), файлы не обязательно где-то хранятся (например, /dev/random ни где не хранится).
- файл — объект, к которому возможен доступ посредством набора функций fopen(), fread(), fwrite()…: определение не может быть сформулировано, так как существуют файлы, в отношении которых имеют смысл непересекающиеся наборы функций. Например, есть файлы, которые не могут быть закрыты, не могут быть открыты. Некоторые файлы не позволяют запись, некоторые не позволяют чтение, может быть невозможным выполнение функции fseek() и т. д.
[править] Файл как объект файловой системы
Файловая система — регламент, определяющий способ организации, хранения и именования данных на носителях информации. Она определяет формат физического хранения информации, которую принято группировать в виде файлов. Тип файловой системы определяет свойства, которыми могут обладать файлы, ограничения на имена файлов, количество файлов и максимальный размер файла.
Файл с точки зрения файловой системы — запись на носителе, указывающая на блок (или блоки) информации на этом же носителе. В самом тривиальном случае файловой системы может и не быть (например, весь носитель представляет собою файл, структура которого определяется приложением). В наиболее сложных случаях файловая система может содержать в себе информацию о нескольких версиях файла, наличии пустых мест в файле, сжатии, шифрации, правах доступа к файлу. Точная интерпретация значений атрибутов зависит от операционной системы.
[править] Файл как объект API операционной системы
Операционная система предоставляет приложениям набор функций и структур для работы с файлами. Возможности операционной системы накладывают дополнительные ограничения на ограничения файловой системы. С точки зрения API файл — объект, по отношению к которому могут быть применены функции этого API. На уровне API уже не существенно, существует ли файл как объект файловой системы или является, например, устройством ввода/вывода.
[править] Свойства файла
В зависимости от файловой системы, файл может обладать различным набором свойств.
[править] Имя файла
В большинстве файловых систем имя файла используется для указания к какому именно файлу производится обращение. В различных файловых системах ограничения на имя файла сильно различаются:
- В FAT16 и FAT12 размер имени файла ограничен 8 символами (3 символа расширения).
- В VFAT ограничение 255 байт.
- В FAT32, HPFS имя файла ограниченно 127 символами (255 байтами)
- В NTFS имя ограничено 254 символами Unicode
- В ext2/ext3 ограничение 255 байт.
Помимо ограничений файловой системы, интерфейсы операционной системы дополнительно ограничивают набор символов, который допустим при работе с файлами.
- Для MS-DOS в имени файла допустимы только заглавные буквы, цифры. Не допустим пробел, знак вопроса, звёздочка, символы больше/меньше, символ вертикальной черты.
- Для Microsoft Windows в имени файла разрешены заглавные и строчные буквы, цифры, некоторые знаки препинания, пробел. Запрещены символы '>', '<', '?', '*', '/', '\'.
- Для операционной системы Linux (с учётом возможности маскировки) разрешены все символы, кроме нулевого байта.
Большинство операционных систем требуют уникальности имени файла в одном каталоге, хотя некоторые системы допускают файлы с одинаковыми именами (например, при работе с ленточными накопителями).
[править] Расширение файла
Расширение как самостоятельный атрибут файла существовал в файловых системах FAT16, FAT12, и использовался для определения типа файла. В остальных файловых системах расширение — условность, часть имени, отделённая самой правой точкой в имени.
[править] Атрибуты
В большинстве файловых систем предусмотрены атрибуты (обычно это бинарное значение "да"/"нет", кодируемое одним битом).
Название атрибута | перевод | значение | файловые системы | операционные системы |
---|---|---|---|---|
READ ONLY | только для чтения | в файл запрещено писать | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
SYSTEM | системный | критический для работы операционной системы файл | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
HIDDEN | скрытый | файл скрывается от показа, пока явно не сказано обратное | FAT32, FAT12, FAT16, NTFS, HPFS, VFAT | DOS, OS/2, Windows |
[править] Время
Для файла могут быть определены следующие временные метки:
- Время создания
- Время модификации
- Время последнего доступа
[править] Владелец и группа файла
В некоторых файловых системах предусмотрено указание на владельца файла, и группу владельца.
[править] Права доступа
В некоторых файловых системах предусмотрена возможность для ограничения доступа пользователей к содержимому файла
Для UNIX-подобных операционных файлов обычно выделяют три типа прав:
- Право на запись
- Право на чтение
- Право на выполнение
Каждое право задаётся раздельно для владельца, для группы и для всех остальных.
В операционных системах Windows при работе с файловой системой NTFS права доступа задаются явно для пользователей или групп (или наследуются от вышестоящих объектов). Права в себя включают:
- Право на чтение
- Право на запись
- Право на исполнение
- Право на удаление
- Право на смену атрибутов и владельца
- Право на создание, удаление подпапок (для папок)
- Право на чтение прав доступа
Каждое право может быть задано как разрешением, так и запретом, запрет имеет больший приоритет, чем разрешение.
[править] Операции с файлом
Условно можно выделить два типа операций с файлом - связанные с его открытием, и выполняющиеся без его открытия. Операции первого типа обычно служат для чтения/записи информации или подготовки к записи/чтению. Операции второго типа выполняются с файлом как с "объектом" файловой системы, в котором файл является мельчайшей единицей структурирования.
[править] Операции, связанные с открытием файла
В зависимости от операционной системы те или иные операции могут отсутствовать.
Обычно выделяют дополнительные сущности, связанные с работой с файлом:
- хэндлер файла, или дескриптор (описатель). При открытии файла (в случае, если это возможно), операционная система возвращает число (или указатель на структуру), с помощью которого выполняются все остальные файловые операции. По их завершению файл закрывается, а хэндлер теряет смысл.
- файловый указатель. Число, являющееся смещением относительно нулевого байта в файле. Обычно по этому адресу осуществляется чтение/запись, в случае, если вызов операции чтения/записи не предусматривает указание адреса. При выполнении операций чтения/записи файловый указатель смещается на число прочитанных (записанных) байт. Последовательный вызов операций чтения таким образом позволяет прочитать весь файл не заботясь о его размере.
- файловый буффер. Операционная система (и/или библиотека языка программирования) осуществляет кеширование файловых операций в специальном буффере (участке памяти). При закрытии файла буффер сбрасывается.
- режим доступа. В зависимости от потребностей программы, файл может быть открыт на чтение и/или запись. Кроме того, некоторые операционные системы (и/или библиотеки) предусматривают режим работы с текстовыми файлами. Режим обычно указывается при открытии файла.
- режим общего доступа. В случае многозадачной операционной системы возможна ситуация, когда несколько программ одновременно хотят открыть файл на запись и/или чтение. Для регуляции этого существуют режимы общего доступа, указывающие на возможность осуществления совместного доступа к файлу (например, файл в который прозводится запись может быть открыт для чтения другими программами - это стандартный режим работы log-файлов).
- Операции
- Открытие файла (обычно в качестве параметров передаётся имя файла, режим доступа и режим совместного доступа, а в качестве значения выступает файловый хэндлер или дескриптор), крмое того обычно имеется возможность в случае записи указать на то, должно ли содержимое файла обнуляться или данные будут дописываться в конец.
- Закрытие файла. В качестве аргумента выступает значение, полученное при открытии файла. При закрытии все файловые буфферы сбрасываются.
- Запись — в файл помещаются данные.
- Чтение — данные из файла помещаются в область памяти.
- Перемещение указателя — указатель перемещается на указанное число байт вперёд/назад или перемещается по указанному смещению относительно начала/конца. Не все файлы позволяют выполнение этой операции (например, файл на ленточном накопителе может не «уметь» перематываться назад).
- Сброс буфферов — содержимое файловых буфферов с незаписанной в файл информацией записывается. Используется обычно для указание на завершение записи логического блока (для сохранения данных в файле на случай сбоя).
- Получение текущего значения файлового указателя.
[править] Операции, не связанные с открытием файла
Операции, не требующие открытия файла оперируют с его «внешними» признаками — размером, именем, положением в дереве каталогов. При таких операциях невозможно получить доступ к содержимому файла, файл является минимальной единицей деления информации.
В зависимости от файловой системы, носителя информации, операционной системой часть операций может быть недоступна.
- Список операций с файлами
- Удаление файла
- Переименование файла
- Копирование файла
- Перенос файла на другую файловую систему/носитель информации
- Создание симлинка или хардлинка
- Получение или изменение атрибутов файла
[править] Типы файлов
В различных операционных системах и/или файловых системах могут быть реализованы различные типы файлов; так же может различаться реализация различных типов.
- «Обыкновенный файл» — файл, позволяющий операции чтения, записи, перемещения внутри файла
- Директория (каталог, папка) — файл является специфичным объектом файловой системы и содержит в себе записи о других файлах. Каталоги могут так же содержать записи о других каталогах, образуя дерево каталогов.
- Хардлинк — в общем случае одна и та же область информации может иметь несколько имён, указывающих на одни и те же данные. В этом случае такие имена называют хардлинками. В общем случае после создания хардлинка сказать кто «настоящий» файл а кто хардлинк невозможно, так как имена равноправны; а область данных существует до тех пор пока существует хотя бы одно из имён. Хардлинки возможны только на одном физическом носителе.
- Симлинк (или софт-линк) — файл, содержащий в себе ссылку на другой файл (или каталог). Может ссылаться на любой элемент файловой системы, в том числе, и расположенный на другом физическом носителе.