|
|
| (не показаны 3 промежуточные версии этого же участника) |
| Строка 1: |
Строка 1: |
|
| |
| == Определение ==
| |
| '''Файл''' (англ. file — папка, скоросшиватель) — концепция в вычислительной технике: сущность, позволяющая получить доступ к какому-либо ресурсу вычислительной системы и обладающая рядом признаков: | | '''Файл''' (англ. file — папка, скоросшиватель) — концепция в вычислительной технике: сущность, позволяющая получить доступ к какому-либо ресурсу вычислительной системы и обладающая рядом признаков: |
| * фиксированное имя (последовательность символов, число или что-то иное, однозначно характеризующее файл); | | * фиксированное имя (последовательность символов, число или что-то иное, однозначно характеризующее файл); |
| * определённое логическое представление и соответствующие ему операции чтения/записи. | | * определённое логическое представление и соответствующие ему операции чтения/записи. |
| : Может быть любой — от последовательности [[бит]] до [[база данных|базы данных]] с произвольной организацией или любым промежуточным вариантом. | | : Может быть любой — от последовательности бит до [[база данных|базы данных]] с произвольной организацией или любым промежуточным вариантом. |
| : Первому случаю соответствуют операции чтения/записи потока и/или массива (то есть последовательные или с доступом по индексу), второму — команды [[СУБД]]. Промежуточные варианты — чтение и разбор всевозможных [[формат файла|форматов файлов]]. | | : Первому случаю соответствуют операции чтения/записи потока и/или массива (то есть последовательные или с доступом по индексу), второму — команды [[СУБД]]. Промежуточные варианты — чтение и разбор всевозможных форматов файлов. |
| | |
| В отличие от [[переменная|переменной]], файл (в частности, его имя) имеет смысл вне конкретной программы. Работа с файлами — по крайней мере, в «простейшем» представлении — реализуется средствами [[операционная система|операционных систем]], а до их появления реализовывалась их предшественниками — мониторами и библиотеками подпрограмм.
| |
| | |
| Ресурсами, доступными через файлы, в принципе, может быть что угодно, представимое в цифровом виде. Чаще всего в их перечень входят:
| |
| * области данных (необязательно на диске);
| |
| * устройства (как физические, так и виртуальные);
| |
| * потоки данных (в частности, вход или выход [[Процесс (информатика)|процесс]]а);
| |
| * сетевые ресурсы;
| |
| * [[объект (программирование)|объекты]] операционной системы.
| |
| | |
| Файлы первого типа исторически возникли первыми и распространены наиболее широко, поэтому часто «файлом» называют и область данных, соответствующую имени.
| |
| | |
| == Файловая система ==
| |
| По мере развития вычислительной техники файлов в системах становилось всё больше. Для удобства работы с ними их, как и другие данные, стали организовывать в [[структуры данных|структуры]] (тогда же появились символьные имена). Вначале это был простой [[массив (программирование)|массив]], «привязанный» к конкретному носителю информации. В настоящее время наибольшее распространение получила [[дерево (теория графов)|древовидная]] организация с возможностью [[монтирование|монтирования]] и вставки дополнительных связей (т. е. ссылок). Соответственно, имя файла приобрело характер ''пути к файлу'': перечисление узлов дерева файловой системы, которые нужно пройти, чтобы до него добраться.
| |
| | |
| == Файл как объект API операционной системы ==
| |
| Операционная система предоставляет приложениям набор функций и структур для работы с файлами. Возможности операционной системы накладывают дополнительные ограничения на ограничения файловой системы. С точки зрения [[API]] файл — объект, по отношению к которому могут быть применены функции этого API. На уровне API уже не существенно, существует ли файл как объект файловой системы или является, например, устройством ввода/вывода.
| |
| | |
| == Свойства файла ==
| |
| В зависимости от файловой системы, файл может обладать различным набором свойств.
| |
| | |
| === Имя файла ===
| |
| В большинстве файловых систем имя файла используется для указания к какому именно файлу производится обращение. В различных файловых системах ограничения на имя файла сильно различаются:
| |
| * В [[FAT16]] и [[FAT12]] размер имени файла ограничен 8 символами (3 символа расширения).
| |
| * В [[VFAT]] ограничение 255 байт.
| |
| * В [[FAT32]], [[HPFS]] имя файла ограниченно 255 символами
| |
| * В [[NTFS]] имя ограничено 254 символами [[Unicode]]
| |
| * В [[ext2]]/[[ext3]] ограничение 255 байт.
| |
| | |
| Помимо ограничений файловой системы, интерфейсы операционной системы дополнительно ограничивают набор символов, который допустим при работе с файлами.
| |
| * Для [[MS-DOS]] в имени файла допустимы только заглавные буквы, цифры. Не допустим пробел, знак вопроса, звёздочка, символы больше/меньше, символ вертикальной черты.http://support.microsoft.com/kb/100108/ru/. При вызове системных функций именами файлов в нижнем или смешанном регистре, они приводятся к верхнему регистру.
| |
| * Для [[Microsoft Windows]] в имени файла разрешены заглавные и строчные буквы, цифры, некоторые знаки препинания, пробел. Запрещены символы «>», «<», «|», «?», «*», «/», «\», «:», «"».
| |
| * Для [[GNU/Linux]] (с учётом возможности маскировки) разрешены все символы, кроме «/» и нулевого байта.
| |
| | |
| Большинство операционных систем требуют уникальности имени файла в одном каталоге, хотя некоторые системы допускают файлы с одинаковыми именами (например, при работе с ленточными накопителями).
| |
| | |
| === Расширение имени файла ===
| |
| Расширение имени файла (часто расширение файла или расширение) как самостоятельный атрибут файла существует в файловых системах [[FAT16]], [[FAT32]],[[NTFS]], используемых операционными системами MS DOS, DR DOS, PC DOS, MS Windows и используется для определения типа файла.Оно позволяет системе определить, каким приложением следует открывать данный файл. По умолчанию в операционной системе Windows расширение скрыто от пользоватея.
| |
| В остальных файловых системах расширение — условность, часть имени, отделённая самой правой точкой в имени.
| |
| | |
| === Атрибуты ===
| |
| В некоторых файловых системах предусмотрены атрибуты (обычно это бинарное значение «да»/«нет», кодируемое одним битом). Практически атрибуты не влияют на возможность доступа к файлам, для этого в некоторых файловых системах существуют [[#Права доступа|права доступа]].
| |
| {|class=standard
| |
| !Название атрибута||перевод||значение||файловые системы||операционные системы
| |
| |-
| |
| |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
| |
| |-
| |
| |ARCHIVE||архивный(требующий архивации)||файл изменён после резервного копирования или не был скопирован программами резервного копирования ||FAT32, FAT12, FAT16, NTFS, HPFS, VFAT||DOS, [[OS/2]], Windows
| |
| |}
| |
| | |
| === Время ===
| |
| Для файла могут быть определены следующие временные метки:
| |
| * Время создания
| |
| * Время модификации
| |
| * Время последнего доступа
| |
| | |
| === Владелец и группа файла ===
| |
| В некоторых файловых системах предусмотрено указание на владельца файла, и группу владельца.
| |
| | |
| === Права доступа ===
| |
| В некоторых файловых системах предусмотрена возможность для ограничения доступа пользователей к содержимому файла
| |
| | |
| В UNIX-подобных операционных системах для файлов обычно выделяют три типа прав:
| |
| * Право на запись
| |
| * Право на чтение
| |
| * Право на выполнение
| |
| | |
| Каждое право задаётся раздельно для владельца, для группы и для всех остальных. [[ACL]] позволяют расширить этот список.
| |
| | |
| В операционных системах [[Windows NT]] при работе с файловой системой NTFS права доступа задаются явно для пользователей или групп (или наследуются от вышестоящих объектов). Права в себя включают:
| |
| * Право на чтение
| |
| * Право на запись
| |
| * Право на исполнение
| |
| * Право на удаление
| |
| * Право на смену атрибутов и владельца
| |
| * Право на создание, удаление подпапок (для папок)
| |
| * Право на чтение прав доступа
| |
| | |
| Каждое право может быть задано как разрешением, так и запретом, запрет имеет больший приоритет, чем разрешение.
| |
| | |
| == Операции с файлом ==
| |
| Условно можно выделить два типа операций с файлом - связанные с его открытием, и выполняющиеся без его открытия. Операции первого типа обычно служат для чтения/записи информации или подготовки к записи/чтению. Операции второго типа выполняются с файлом как с "объектом" файловой системы, в котором файл является мельчайшей единицей структурирования.
| |
| | |
| === Операции, связанные с открытием файла ===
| |
| В зависимости от операционной системы те или иные операции могут отсутствовать.
| |
| | |
| Обычно выделяют дополнительные сущности, связанные с работой с файлом:
| |
| * хэндлер файла, или дескриптор (описатель). При ''открытии файла'' (в случае, если это возможно), операционная система возвращает число (или указатель на структуру), с помощью которого выполняются все остальные файловые операции. По их завершению файл ''закрывается'', а хэндлер теряет смысл.
| |
| * файловый указатель. Число, являющееся смещением относительно нулевого байта в файле. Обычно по этому адресу осуществляется чтение/запись, в случае, если вызов операции чтения/записи не предусматривает указание адреса. При выполнении операций чтения/записи файловый указатель смещается на число прочитанных (записанных) байт. Последовательный вызов операций чтения таким образом позволяет прочитать весь файл не заботясь о его размере.
| |
| * файловый буфер. Операционная система (и/или библиотека языка программирования) осуществляет [[кэширование]] файловых операций в специальном буфере (участке памяти). При закрытии файла буфер сбрасывается.
| |
| * режим доступа. В зависимости от потребностей программы, файл может быть открыт на чтение и/или запись. Кроме того, некоторые операционные системы (и/или библиотеки) предусматривают режим работы с текстовыми файлами. Режим обычно указывается при открытии файла.
| |
| * режим общего доступа. В случае многозадачной операционной системы возможна ситуация, когда несколько программ одновременно хотят открыть файл на запись и/или чтение. Для регуляции этого существуют режимы общего доступа, указывающие на возможность осуществления совместного доступа к файлу (например, файл в который производится запись может быть открыт для чтения другими программами - это стандартный режим работы log-файлов).
| |
| | |
| ;Операции:
| |
| *Открытие файла (обычно в качестве параметров передается имя файла, режим доступа и режим совместного доступа, а в качестве значения выступает файловый хэндлер или дескриптор), кроме того обычно имеется возможность в случае открытия на запись указать на то, должен ли размер файла изменяться на нулевой.
| |
| * Закрытие файла. В качестве аргумента выступает значение, полученное при открытии файла. При закрытии все файловые буферы сбрасываются.
| |
| * Запись — в файл помещаются данные.
| |
| * Чтение — данные из файла помещаются в область памяти.
| |
| * Перемещение указателя — указатель перемещается на указанное число байт вперёд/назад или перемещается по указанному смещению относительно начала/конца. Не все файлы позволяют выполнение этой операции (например, файл на ленточном накопителе может не «уметь» перематываться назад).
| |
| * Сброс буферов — содержимое файловых буферов с незаписанной в файл информацией записывается. Используется обычно для указания на завершение записи логического блока (для сохранения данных в файле на случай сбоя).
| |
| * Получение текущего значения файлового указателя.
| |
| | |
| === Операции, не связанные с открытием файла ===
| |
| Операции, не требующие открытия файла оперируют с его «внешними» признаками — размером, именем, положением в [[дерево каталогов|дереве каталогов]]. При таких операциях невозможно получить доступ к содержимому файла, файл является минимальной единицей деления информации.
| |
| | |
| В зависимости от файловой системы, носителя информации, операционной системой часть операций может быть недоступна.
| |
| ;Список операций с файлами
| |
| * Открытие для изменения файла
| |
| * Удаление файла
| |
| * Переименование файла
| |
| * Копирование файла
| |
| * Перенос файла на другую файловую систему/носитель информации
| |
| * Создание [[симлинка]] или [[хардлинка]]
| |
| * Получение или изменение атрибутов файла
| |
| | |
| == Типы файлов ==
| |
| В различных операционных и/или файловых системах могут быть реализованы различные типы файлов; кроме того, реализация различных типов может различаться.
| |
| | |
| * «Обыкновенный файл» — файл, позволяющий операции чтения, записи, перемещения внутри файла
| |
| * [[Директория (файловая система)|Директория]] (алфавитный справочник, часто переводится как каталог) — файл, содержащий записи о входящих в него файлах. Директории могут содержать записи о других директориях, образуя [[Дерево (теория графов)|древовидную структуру]].
| |
| * [[Жёсткая ссылка]], часто используется калька хардлинк) — в общем случае, одна и та же область информации может иметь несколько имён, указывающих на одни и те же данные. В таком случае имена называют жёсткими ссылками (хардлинками). В общем случае после создания хардлинка сказать где «настоящий» файл а где хардлинк невозможно, так как имена равноправны. Сама область данных существует до тех пор пока существует хотя бы одно из имён. Хардлинки возможны только на одном физическом носителе.
| |
| * [[Символьная ссылка]] (симлинк, софтлинк) — файл, содержащий в себе ссылку на другой файл или директорию. Может ссылаться на любой элемент файловой системы, в том числе, и расположенный на другом физическом носителе.
| |
| | |
| == Особенности реализации ==
| |
| В операционной системе [[UNIX]] [[Процесс (информатика)|процессы]] (обычно находятся в каталоге <tt>/proc</tt>) и устройства (<tt>/dev</tt>) представляются в виде файлов особого рода, что позволяет использовать некоторые файловые операции для манипуляции этими объектами.
| |
| | |
| В некоторых файловых системах (например, в файловой системе OS VAX [[VMS]]) файлы имеют ''версию'', что позволяет открывать более старые варианты данного файла. В файловой системе [[Mac OS]] ([[HFS (файловая система)|HFS]]) у файлов есть два «потока»: поток данных (где хранится содержимое файла) и поток ресурсов, хранящий информацию о программе, предназначенной для открывания данного файла и, возможно, некоторую информацию для этой программы. В [[NTFS]] файл может содержать, кроме основного, сколько угодно именованных потоков.
| |
| | |
| == Проблема точного определения понятия файл ==
| |
| Так как файл в разных операционных системах обладает различным набором [[атрибут]]ов, свойств и [[метод]]ов доступа, формулировка универсального определения, которое бы учитывало все особенности, сформулировано не было.
| |
| | |
| Вопрос «Что такое файл?» неоднократно вызывал в эхо-конференции ru.os.cmp войны [[флейм]]а, из-за чего попал в FAQ конференции с формулировкой [http://groups.google.ru/group/fido7.ru.os.cmp/msg/d0392be2b9267405 FAQ конференции ru.os.cmp]:
| |
|
| |
|
| [[Категория:Определения]] | | [[Категория:Определения]] |