О файлах и файловых структурах. Что такое файловая структура компьютера? Определение

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

и файловой структуры

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

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

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

Как правило (не всегда, правда), обозначение объекта, называемого файлом, состоит из двух частей: имени и расширения. Собственно, имя может быть абсолютно произвольным и задаваться на разных языках. Расширение - это специальное обозначение из трех и более латинских литер, которое указывает на Проще говоря, по расширению можно понять, какой программе сопоставлен файл, является ли он системным и т. д.

Открытие файла по умолчанию в любой операционной системе производится двойным кликом мыши. Однако не факт, что все можно открыть таким способом. Простейший пример: исполняемые файлы в Windows, имеющие расширение.exe, так запустить можно, а вот те же динамические библиотеки, в расширении обозначаемые как.dll, хоть и содержат исполняемые коды, тем не менее, таким способом не открываются. Связано это только с тем, что обращение к их содержимому производится посредством других программных компонентов, или вызов кода осуществляется специализированными компонентами самой операционной системы. Но это самый простой пример.

Файлы (объекты), не соответствующие ни ни какой-либо программе, открыть будет не так просто. Грубо говоря, ни одна «операционка» не поймет, какое именно средство для открытия нужно запустить. В лучшем случае будет предложено выбрать соответствующую программу самому из предоставляемого списка вероятных решений.

Файлы и файловая структура: информатика на заре развития компьютерных технологий

Теперь посмотрим, что собой представляли информационные технологии, когда только появились Считается, что основной системой, используемой в то время, была примитивная по нынешним временам DOS, в которой для доступа к функциям нужно было вводить специализированные команды.

С появлением уникального детища Norton Commander такая необходимость не то чтобы отпала (некоторые команды все равно прописывать было нужно), а, скорее, уменьшилась. Именно этот файловый менеджер, исходя из нашего примера, и можно назвать оглавлением, поскольку все данные, хранящиеся на жестком диске или внешнем носителе, были четко структурированы.

Файлы и папки

Как уже понятно, в любой системе существует несколько основных видов объектов. Файл и файловая структура, кроме основного элемента (файла), неотделимы от понятия папки. Иногда данный термин обозначается как «каталог» или «директория». По сути, это раздел, в котором хранятся отдельные компоненты.

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

Простейшие примеры поиска файлов

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

Однако для более точного поиска иногда нужно знать, где именно располагается искомый файл. Грубо говоря, необходимо выбрать определенный ящик в комоде, где находится нужный нам предмет. Сам поиск производится при помощи стандартного средства в файловом менеджере, но можно использовать и сочетание вроде Ctrl + F, которое вызывает поисковую строку.

Что такое файловая система?

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

Сегодня файловых систем можно найти достаточно много. К примеру, наиболее известными для Windows с момента развития компьютерной техники стали системы FAT с архитектурой 8, 16, 32 и 64 бита, NTFS и ReFS. Файловая система, структура файла, способ упорядочивания тесно связаны между собой. Но теперь несколько слов о самих системах.

Не говоря о технических подробностях, следует отметить, что основное различие между ними состоит только в том, что FAT имеет больший для хранения и ускоренного доступа к файлам небольшого объема, а NTFS и ReFS оптимизированы для больших массивов данных и быстрого доступа к ним на максимальной скорости считывания информации с жесткого диска.

Операции с файлами

Теперь посмотрим с другой стороны на то, что представляет собой Операции с файлами, которые предусмотрены в любой «операционке», в общем-то, особо и не различаются.

Среди основных выделяют создание файла, открытие, просмотр, редактирование, сохранение, переименование, копирование, перемещение, удаление и т. д. Такие действия являются стандартными для всех существующих систем. Однако есть и некоторые специфичные функции.

Архивация данных

Среди специфичных функций в первую очередь можно выделить сжатие файлов и папок, называемое архивацией, а также обратный процесс - извлечение данных из архива. На момент разработки системы DOS создание архивных типов данных в основном сводилось к использованию стандарта ARJ.

Но с появлением технологий ZIP-архивирования такие процессы получили новое развитие. Впоследствии был создан и универсальный архиватор RAR. Эти технологии сейчас представлены в любой «операционке» даже без необходимости устанавливать дополнительное ПО. Файловая структура ОС операции с файлами в этом ракурсе трактуется как виртуальносжатие. По сути, технологии сжатия просто дают системе указание на то, чтобы она определяла не искомый размер, а меньший. Сам информационный объем файла или папки при архивации не меняется.

Управление отображением объектов

Понятия «файловая структура», «структура файла» и т. д. следует рассматривать еще и с точки зрения возможности видения самих объектов. Не секрет, что практически все пользователи современных ПК сталкивались с термином «скрытые файлы и папки».

Что это такое? Означает это только то, что в системе установлено ограничение на отображение некоторых объектов (например, системных файлов и папок, чтобы пользователь их случайно не удалил). То есть в физическом плане они с жесткого диска никуда не деваются, просто файловый менеджер их не видит.

Чтобы отобразить все скрытые объекты, в том же «Проводнике» следует использовать меню «Вид», где на соответствующей вкладке ставится галочка в строке отображения всех и файлов. После включения такого вида объекты будут иметь полупрозрачные иконки.

С поиском скрытых объектов тоже могут возникнуть трудности. При вводе имени файла или его расширения даже с указанием конкретного местоположения при отключенном отображении таких объектов результата не будет (система ведь не видит их). Для того чтобы их найти, нужно в начале и в конце имени корневой папки вводить символ %. Например, для поиска директории AppData, которая является скрытой и располагается в локальной папке настроек конкретного пользователя, следует использовать строку поиска %USERPROFILE%\AppData. Только в этом случае файл и файловая структура в целом получат ключ к взаимосвязи.

Заключение

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

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

Рано или поздно начинающий пользователь компьютера сталкивается с таким понятием, как файловая система (ФС). Как правило, впервые знакомство с данным термином происходит при форматировании носителя информации: логические диски и подключаемые носители (флешки, карты памяти, внешний жесткий диск).

Перед форматированием операционная система Windows предлагает выбрать вид файловой системы на носителе, размер кластера, способ форматирования (быстрое или полное). Давайте разберемся, что же такое файловая система и для чего она нужна?

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

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

Для лучшего понимания представьте библиотекаря, который выдает клиенту книгу по ее названию. Или в обратном порядке: клиент сдает прочитанную книгу библиотекарю, который размещает ее обратно на хранение. Клиенту совсем нет необходимости знать, где и как хранится книга, это обязанность служащего заведения. Библиотекарь знает правила каталогизации библиотеки и согласно этим правилам разыскивает издание или размещает его обратно, т.е. выполняет свои служебные функции. В данном примере библиотека – это носитель информации, библиотекарь – файловая система, клиент – программа.

Основные функции файловой системы

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

  • размещение и упорядочивание на носителе данных в виде файлов;
  • определение максимально поддерживаемого объема данных на носителе информации;
  • создание, чтение и удаление файлов;
  • назначение и изменение атрибутов файлов (размер, время создания и изменения, владелец и создатель файла, доступен только для чтения, скрытый файл, временный файл, архивный, исполняемый, максимальная длина имени файла и т.п.);
  • определение структуры файла;
  • организация каталогов для логической организации файлов;
  • защита файлов при системном сбое;
  • защита файлов от несанкционированного доступа и изменения их содержимого.

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

Если файл имеет размер кластера, то он занимает только один кластер. Если размер файла превышает размер ячейки, то он размещается в нескольких ячейках-кластерах. Причем свободные кластеры могут находиться не рядом с другом, а быть разбросанными по физической поверхности диска. Такая система позволяет наиболее рационально использовать место при хранении файлов. Задача файловой системы — разложить файл при записи по свободным кластерам оптимальным образом, а также собрать его при чтении и выдать программе или операционной системе.

Виды файловых систем

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

  1. FAT32
  2. ISO9660

Последние две системы предназначены для работы с компакт дисками. Файловые системы Ext3 и Ext4 работают с операционными системами на основе Linux. NFS Plus – это ФС для операционных систем OS X, используемых в компьютерах фирмы Apple.

Самое большое распространение получили файловые системы NTFS и FAT32 и это не удивительно, т.к. они предназначены для операционных систем Windows, под управлением которых работает подавляющее большинство компьютеров в мире.

Сейчас FAT32 активно вытесняется более продвинутой системой NTFS по причине ее большей надежности к сохранности и защите данных. К тому же последние версии ОС Windows просто не дадут себя установить, если раздел жесткого диска будет отформатирован в FAT32. Программа установки потребует отформатировать раздел в NTFS.

Файловая система NTFS поддерживает работу с дисками объемом в сотни терабайт и размером одного файла до 16 терабайт.

Файловая система FAT32 поддерживает диски до 8 терабайт и размер одного файла до 4Гб. Чаще всего данную ФС используют на флешках и картах памяти. Именно в FAT32 форматируют внешние накопители на заводе.

Однако ограничение на размер файла в 4Гб на сегодня уже является большим минусом, т.к. в связи с распространением высококачественного видео, размер файла с фильмом будет превышать это ограничение и его будет невозможно записать на носитель.

Поделиться.

Файлы и файловая структура

В компьютерных технологиях единицей хранения данных является объект переменной длины, называемый файлом . Файл – - это последовательность произвольного числа байтов, обладающая уникальным именем. Файловые системы создают для пользователей некоторое виртуальное представление внешних запоминающих устройств ЭВМ, позволяя работать с ними не на низком уровне команд управления физическими устройствами, а на высоком уровне наборов и структур данных. Таким образом, файловая система – - это система управления данными.

Имя файла имеет особое значение – - оно фактически несет в себе адресные функции в иерархических структурах. Кроме того, имя может иметь расширение , в котором хранятся сведения о типе данных. Если имена создаваемых файлов пользователь может задавать произвольно, то в использовании расширений следует придерживаться некоторой традиции. Например, в операционной системе MS DOS файлы с расширениями:: .com, .exe, .bat – - исполняемые; .bat, .txt, .doc – - текстовые; .pas, .bas, .c, .for – - тексты программ на известных языках программирования: (Паскале, Бейсике, Си, Фортране соответственно); .dbf – - файл базы данных. В различных операционных системах существуют ограничения на длину имени и расширения имени файла. Так, в MS DOS длина имени файла не должна превышать восьми символов, а расширение – - трех, т. е. используется стандарт 8.3. В операционной системе Windows ограничения значительно менее жесткие.

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

Файловая система – - это часть операционной системы компьютера и поэтому всегда несет на себе отпечаток свойств конкретной операционной системы. Файловая система скрывает от пользователя картину реального расположения информации во внешней памяти, обеспечивает независимость программ от особенностей конкретной конфигурации ЭВМ, т. е. логический уровень работы с файлами. При работе с файлами пользователю предоставляются средства для создания новых файлов, операции по считыванию и записи информации и т. п., не затрагивающие конкретные вопросы программирования работы канала по пересылке данных, по управлению внешними устройствами.

Наиболее распространенным видом файлов, внутренняя структура которых обеспечивается файловыми системами различных операционных систем, являются файлы с последовательной структурой. Файлы в этом случае представляются в виде набора составных элементов, называемых логическими записями произвольной длины и с последовательным доступом. В ряде операционных систем предусматривается использование более сложных логических структур файлов, например, древовидной структуры. На физическом уровне блоки файла могут размещаться в памяти непрерывной областью или храниться несмежно. Вся учетная информация о расположении файлов на магнитном диске сводится в одно место – - каталог или директорию диска. Каталог представляет собой список элементов, каждый из которых описывает характеристики конкретного файла, используемые для организации доступа к нему – - имя файла, его тип, местоположение на диске, размер. Каталогов может быть большое число, и они связываются в информационные структуры, например, в иерархическую (древовидную) систему каталогов. Каждый каталог рассматривается как файл и имеет собственное имя. Полное имя каталога или файла в такой структуре задает путь переходов между каталогами и файлами в логической структуре каталогов (см. рис. 1.5).

Рис. 1.5. Иерархическая система каталогов

Структура самых файлов может быть тривиальной. Например, текст может сохраняться в виде последовательности байтов, соответствующих кодировке таблицы ASCII. Однако в большинстве случаев вместе с данными приходится хранить и некоторую дополни


тельную информацию. Способ организации данных в файле, т. е. структура файла, называется форматом . Формат файла определяет способ правильной интерпретации хранимых данных. Существует довольно много различных форматов файлов. Некоторые из них стандартизированы и поддерживаются любой операционной системой, некоторые специфичны только для данных операционных систем. Часто заголовок файла включает идентификатор формата файла. Современные программные системы позволяют одновременно включать в файл данные разных видов, т. е. файл может иметь очень сложный формат. Например, в документ MS Word можно включать текст, картинки, таблицы, формулы и многое другое.

В большинстве случаев пользователю ничего не нужно знать о внутреннем устройстве файлов. Это уровень абстракции интерфейса операционных систем.

Лабораторная работа №10

ВЫВОД НА ДИСК И ПРИНТЕР

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

Более того, значения, присвоенные переменным, сохраняются только на время выполнения программы. Как только работа программы завершена, вся введенная информация теряется. Это означает, что если вы, например, ввели сведения о своей коллекции компакт-дисков в массив структурных переменных, они утрачиваются после завершения работы программы, и когда вы в следующий раз обратитесь к компьютеру, все данные придется вводить заново.

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

Что такое файловая структура

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

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

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

Рис. 1. Некоторое время данные хранятся в буфере

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

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


Рис. 2. Файловая структура хранит информацию, необходимую для нормального выполнения файловых операций

Почти все компиляторы Си и Си++ хранят информацию, необходимую для работы с файлами, в файле заголовков STDIO.H. Этот файл содержит определения констант, которые нужны для операций с файлами. Кроме того, он может содержать описание файловой структуры. Для того, чтобы воспользоваться функциями работы с файлами, программу следует начинать с инструкции

#include,

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

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

Указатель на файл

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

FILE *file_pointer;

Имя структуры FILE говорит программе о том, что определяемая переменная является указателем именно на файловую структуру. Звездочка предписывает создать указатель с соответствующим именем переменной.

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

FILE *infile, *outfile;

Как открыть файл

Связь между программой и файлом устанавливается при помощи функции fopen(), синтаксис которой показан на рис. 3.

Эта функция присваивает адрес структуры указателю. Первым параметром этой функции является имя файла, которое должно быть указано в соответствии с


Рис. 3. Синтаксис функции fopen()

определенными правилами. Например, в операционной системе MS-DOS имя файла может состоять максимум из восьми символов, плюс расширение имени, состоящее не более чем из трех символов (расширение не является обязательным элементом). Если вы хотите вывести информацию на печатающее устройство, а не в дисковый файл, в качестве имени файла в кавычках указывается "PRN". При этом автоматически осуществляется вывод данных на принтер.

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

R - Указывает на то, что будет выполняться чтение информации из файла в память компьютера. Если файл к этому моменту не существует на диске, программа сообщит об ошибке выполнения.w - Указывает на то, что будет выполняться запись данных на диск или вывод на принтер. Если файл к этому моменту не существует, операционная система создаст его. Если файл уже существует на диске, вся записанная в нем на данный момент информация будет уничтожена.a - Указывает на то, что следует добавить информацию в конец файла. В случае отсутствия файла, операционная система создаст его. Если он существует, выводимые новые данные будут добавлены в конец файла без уничтожения текущего содержимого.

Например, если вы хотите создать файл с именем CD.DAT для хранения картотеки коллекции компакт-дисков, вы должны использовать следующие инструкции:

FILE *cdfile;cdfile = fopen("CD.DAT", "w");

Если в программе требуется осуществить чтение из файла, а не запись в него, используйте следующую запись:

FILE *cdfile;cdfile = fopen("CD.DAT", "r");

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

Если вы хотите распечатать информацию о вашей коллекции на принтере, используйте следующую последовательность инструкций:

FILE *cdfile;cdfile = fopen("PRN", "w");

Учтите, что вывод информации на принтер возможен только с режимом доступа "w".

Как Си/Си++ работает с файлами

Си сохраняет сведения о текущей позиции чтения и записи в файле, используя специальный указатель.

При чтении информации из файла, указатель определяет следующие данные, которые должны быть считаны с диска. Когда файл открывается впервые с использованием режима доступа "r", указатель помещается на первый символ файла. При выполнении очередной операции чтения, указатель перемещается к следующей порции данных, которые должны быть прочитаны. Величина шага перемещения при этом зависит от количества информации, которая считывается за один прием (рис. 4). Если за один раз считывается только один символ, указатель передвинется на следующий символ, если читается целая структура, указатель перейдет на следующую структуру. Как только вся информация прочитана из файла, указатель попадает на специальный код, называемый символом конца файла Наличие символа конца файла на самом деле вовсе не является обязательным. Попытка продолжения чтения после достижения конца файла приведет к ошибке выполнения.

Если файл открывается с режимом доступа "w", указатель также помещается в начало файла, так что первые введенные данные будут помещены в начало файла. При закрытии файла после введенного массива данных будет добавлен символ конца файла. Если файл к моменту его открытия с использованием режима доступа "w" уже существует, все содержащиеся в нем данные затираются и «поверх» них записывается новая информация, введенная с помощью процедуры записи. Любые данные, которые могут остаться не уничтоженными, располагаются после нового символа конца файла, так что к ним уже нельзя будет обратиться при следующем чтении данных из файла. Таким образом, любая попытка записи данных в существующий файл с использованием режима доступа "w" приведет к уничтожению хранящейся в нем на данный момент информации. Это произойдет даже в том случае, если файл будет просто открыт и закрыт, без записи каких-либо данных.

Если файл открывается с использованием режима доступа "a", указатель помещается на символ конца файла. Новые данные, которые записываются в файл, размещаются после уже существующих данных, а затем добавляется символ конца файла.

Как закрыть файл

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

Fclose(file_pointer);

Закрывая файл, мы получаем гарантию, что вся информация, имевшаяся в буфере, действительно записана в файл. Если выполнение программы заканчивается до закрытия файла, какая-то не попавшая на диск часть информации может остаться в буфере, в результате чего она будет утрачена. Кроме того, не будет надлежащим образом записан символ конца файла, и в следующий раз программа не сможет получить доступ к файлу.

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

Листинг 1. Использование одного указателя файла в двух операциях.

FILE *cdfile;if((cdfile = fopen("CD.DAT", "w")) == NULL) { puts("Невозможно открыть файл"); exit(); }/* Здесь должны располагаться инструкции записи в файл */fclose(cdfile);if((cdfile = fopen("CD.DAT", "r")) == NULL) { puts("Невозможно открыть файл"); exit(); }/* В этом месте должны быть записаны инструкции чтения из файла */fclose(cdfile);

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

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

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

Функции ввода и вывода

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

· посимвольная запись данных в файл или вывод их на принтер с использованием функции putc() или fputc();

· посимвольное чтение данных из файла с использованием функции getc() или fgetc();

· построчная запись данных в файл или вывод их на принтер с использованием функции fputs();

· построчное чтение данных из файла с использованием функции fgets();

· форматированный вывод символов, строк или чисел на диск или на принтер с помощью функции fprintf();

· форматированный ввод символов, строк или чисел из файла с помощью функции fscanf();

· запись целой структуры с использованием функции fwrite();

· чтение целой структуры с использованием функции fread().

Работа с символами

Посимвольная передача данных является самой основной формой файловых операций. Хоть она и не принадлежит к числу широко распространенных на практике способов обращения с информацией, тем не менее, она хорошо иллюстрирует основные принципы работы с файлами. В приведенной ниже программе происходит посимвольная запись данных в файл, которая продолжается до тех пор, пока не нажата клавиша Enter :

/*fputc.c*/#include main() { FILE *fp; char letter; if((fp = fopen("MYFILE","w"))==NULL) { puts("Невозможно открыть файл"); exit(); } do { letter=getchar(); fputc(letter, fp); } while(letter != "\r"); fclose(fp); }

Файл открывается с режимом доступа "w". Если файл с именем MYFILE не существует к моменту выполнения программы, он будет создан. В цикле do, с помощью функции getchar(), осуществляется ввод последовательности символов, которые затем записываются в файл с помощью функции putc(). Синтаксис записи putc() таков:

Putc(char_variable, file_pointer);

С теми же аргументами может использоваться и функция fputc().

Цикл выполняется до тех пор, пока не нажата клавиша Enter , которая вводит код «возврат каретки» (\r), после чего файл закрывается.

Работа со строками

Вместо того, чтобы работать с отдельными символами, можно читать из файла и записывать в него целые строки текста. Построчная запись и чтение осуществляются с использованием функций fputs() и fgets().

Функция fputs() имеет следующий синтаксис:

Fputs(string_variable, file_pointer);

Эта функция выполняет построчную запись данных в файл или вывод на принтер, но не добавляет код «новая строка». Для того чтобы каждая строка записывалась на диск (или печаталась на принтере) действительно как отдельная строка, необходимо вводить код «новая строка» вручную. Например, в приведенной ниже программе создается файл имен:

/*fputc.c*/#include main() { FILE *fp; char flag; char name; if((fp = fopen("MYFILE","w"))==NULL) { puts("Невозможно открыть файл"); exit(); } flag = "y"; while(flag != "n") { puts("Введите имя"); gets(name); fputs(name, fp); fputs("\n",fp); printf("Желаете ввести другое имя?"); flag=getchar(); putchar("\n"); } fclose(fp); }

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

Если ваш компилятор может использовать функцию strlen(), можно несколько упростить процедуру ввода, используя следующие инструкции:

Printf("Пожалуйста, введите имя: ");gets(name);while(strlen(name) > 0) { fputs(name, fp); fputs("\n", fp); printf("Пожалуйста, введите имя: "); gets(name); }

Символы, которые вы набираете на клавиатуре, присваиваются строковой переменной name, а затем проверяется, не оказалась ли длина строки равной 0. Если на запрос сразу же нажать клавишу Enter, строка будет иметь нулевую длину и выполнение цикла прекратится. Если до нажатия Enter ввести хотя бы один символ, строка и код «новая строка» будут записаны на диск.

Некоторые компиляторы позволяют еще более упростить алгоритм ввода строки, например, так:

Printf("Пожалуйста, введите имя: ");while(strlen(gets(name)) > 0) { fputs(name, fp); fputs("\n", fp); printf("Пожалуйста, введите имя: "); }

где ввод строки выполняется внутри условия while.

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

If ((fp = fopen("prn", "w")) == NULL)

Для создания программы печати длина строки определяется равной 81 символу, чтобы строка могла уместиться во всю ширину экрана, прежде чем будет нажата клавиша Enter . В Листинге 2 приводится текст программы, которая демонстрирует, как можно написать простой текстовый процессор. Строка не посылается на принтер до тех пор, пока не нажата клавиша Enter , что позволяет с помощью клавиши Backspace корректировать ошибки ввода строки.

Листинг 2. Программа вывода строки на печатающее устройство.

/*wp.c*/#include "stdio.h"main() { FILE *fp; char line; if ((fp = fopen("prn", "w")) == NULL) { puts("Принтер не готов к работе"); exit(); } puts("Введите текст, после ввода каждой строки нажимайте Enter\n"); puts("Для прекращения ввода нажмите Enter в начале новой строки\n"); gets(line); while (strlen(line) > 0) { fputs(line, fp); fputs("\n", fp); gets(line); } fclose(fp); }

Чтение строк

Чтение строк из файла осуществляется с помощью функции fgets(). Синтаксис функции:

Fgets(string_variable, lenght, file_pointer);

Функция вводит строку целиком до символа новой строки, если ее длина не превышает значения, указанного в параметре lenght минус один символ. Параметр lenght является целым числом либо целочисленной константой или переменной, указывающей максимально возможное количество символов в строке.

Ниже приведена программа, в которой осуществляется чтение имен из файла, созданного в предыдущем примере:

/*fgets.c"/#include "stdio.h"main() { FILE *fp; char name; if ((fp = fopen("MYFILE", "r")) == NULL) { puts("Невозможно открыть файл"); exit(); } while(fgets(name, 12, fp) != NULL) { printf(name); } fclose(fp); }

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

Если вы пишете программу, предназначенную для чтения любого текстового файла, указывайте значение аргумента lenght равным 80.

Кстати, обратите внимание, что функция printf() используется в этом примере для вывода содержимого строковой переменной без указателей формата. Каждая строка, читаемая из файла, включает код «новая строка», который был записан в файл в инструкции fputs("\n", fp);, и никаких дополнительных кодов «новая строка» в параметры функции printf() включать не требуется.

Листинг 3. Форматированный вывод.

/*fprintf.c*/#include "stdio.h"main() { FILE *fp; char name; int quantity; float cost; if ((fp = fopen("MYFILE", "w")) == NULL) { puts("Невозможно открыть файл"); exit(); } printf("Введите наименование товара: "); gets(name); while (strlen(name) > 0) { printf("Введите цену товара: "); scanf("%f", &cost); printf("Введите количество единиц товара: "); scanf("%d", &quantity); fprintf(fp, "%s %f %d\n", name, cost, quantity); printf("Введите наименование товара: "); gets(name); } fclose(fp); }

Обратите внимание, что в последней строке цикла происходит ввод следующего имени. Это позволяет прекратить повторение цикла простым нажатием клавиши Enter . Некоторые начинающие программисты, вероятно, написали бы этот цикл таким образом:

Do { printf("Введите наименование товара: "); gets(name); printf("Введите цену: "); scanf("%f", &cost); printf("Введите количество единиц товара: "); scanf("%d", &quantity); fprintf(fp, "%s %f %d\n", name, cost, quantity); }while (strlen(name) > 0);

и эта программа работала бы столь же успешно, не считая того, что для окончания цикла требовалось бы нажать клавишу Enter трижды: первый раз при вводе названия и еще два раза в ответ на просьбу ввести цену и количество товара.

Внутри цикла while данные о цене и количестве каждого наименования товара вводятся с использованием функции scanf(), а затем записываются на диск с помощью инструкции

Fprintf(fp, "%s %f %d\n", name, cost, quantity);

Обратите внимание, что код «новая строка» записывается в файл в конце каждой строки. Если просмотреть содержимое файла с помощью команды TYPE операционной системы MS-DOS, то каждая строка инвентарной описи и на экране будет начинаться с новой строки:

Если бы код «новая строка» не был записан на диск, текст выводился бы подряд, в одну строку на экране, и выглядел примерно так:

Дискеты 1.120000 100лента 7.340000 150картридж 75.000000 3

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

Дискеты 1.120000 Memoryexлента 7.340000 Okaydataкартридж 75.000000 HP

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

Дискеты 1.120000 Memoryexлента

Все выведенные на диск данные, даже значения типа int или float, хранятся в виде текстовых символов. Об этом мы будем говорить чуть позже.

Листинг 4. Чтение форматированного текста из файла.

/*fscanf.c*/#include "stdio.h"main() { FILE *fp; char name; int quantity; float cost; if ((fp = fopen("MYFILE", "r")) == NULL) { puts("Невозможно открыть файл"); exit(); } while (fscanf(fp, "%s%f%d", name, &cost, &quantity) != EOF) { printf("Наименование товара: %s\n", name); printf("Цена: %.2f\n", cost); printf("Количество единиц: %d\n", quantity); } fclose(fp); }

Работа со структурами

Одним из способов преодолеть ограничения функции scanf() является объединение элементов данных в структуру с тем, чтобы впоследствии осуществлять ввод и вывод структур целиком. Структуру можно записать на диск с помощью функции fwrite() и прочитать из файла с помощью функции fread().

Синтаксис функции fwrite() такой:

Fwrite(&structure_variable, structure_size, number_of_structures, file_pointer);

На первый взгляд, эта инструкция выглядит несколько устрашающей, но на самом деле использовать ее очень легко:

· &structure_variable - имя структурной переменной с оператором получения адреса, сообщающим компилятору стартовый адрес информации, которую мы хотим записать на диск;

· structure_size - это количество символов в структуре; не обязательно подсчитывать его самому, для этого можно использовать библиотечную функцию sizeof(), записанную следующим образом:

Sizeof(structure_variable)

которая автоматически определит размер указанной структуры;

· number_of_structures - это целое число, определяющее количество структур, которые мы хотим записать в один прием; здесь всегда следует указывать число 1, если только вы не собираетесь создать массив структур и записать его одним большим блоком;

· file_pointer - указатель на файл.

В качестве примера предположим, что вы хотите записать на диск сведения о своей коллекции компакт-дисков. Используя структуру CD, которую мы подробно разбирали ранее, пишем инструкцию: fwrite(&disc, sizeof(disc), 1, fp);

Выполнение этой инструкции иллюстрирует рис. 5.

Текст программы, которая вводит данные в структуру CD, а затем сохраняет ее на диске, приведен в Листинге12.5. Для ввода имени создаваемого файла используется функция gets(). Переменная, в которой хранится имя файла, используется функцией fopen() для того, чтобы открыть файл.

Информация о каждой структуре CD вводится с клавиатуры, после чего структура целиком записывается на диск.



Рис. 5. Синтаксис функции fwrite() в инструкции записи структуры CD

Листинг 5. Запись структуры CD.

/*fwrite.c*/#include "stdio.h"main() { FILE *fp; struct CD { char name; char description; char category; float cost; int number; } disc; char filename; printf("Введите имя файла, который вы желаете создать: "); gets(filename); if ((fp = fopen(filename, "w")) == NULL) { printf("Невозможно открыть файл %s\n", filename); exit(); } puts("Введите сведения о диске\n"); printf("Введите название диска: "); gets(disc.name); while (strlen(disc.name) > 0) { printf("Введите описание: "); gets(disc.description); printf("Введите категорию: "); gets(disc.category); printf("Введите цену: "); scanf("%f", &disc.cost); printf("Введите номер ячейки: "); scanf("%d", &disc.number); fwrite(&disc, sizeof(disc), 1, fp); printf("Введите название: "); gets(disc.name); } fclose(fp); }

Чтение структур

Fread(&structure_variable, structure_size, number_of_structures, file_pointer);

За исключением имени функции эта инструкция полностью совпадает с записью функции fwrite(). Программа, в которой из файла считывается структура CD, приведена в Листинге 6. Для чтения данных используется цикл while:

While (fread(&disc, sizeof(disc), 1, fp) == 1)

Функция fread() возвращает значение, соответствующее количеству успешно прочитанных структур. Так как в аргументе функции мы указали, что читать следует по одной структуре, функция возвращает значение 1. Цикл while будет выполняться до тех пор, пока считывание структур с диска проходит успешно. Если чтение структуры становится невозможным, например потому, что достигнут конец файла, функция возвращает значение 0, и выполнение цикла прекращается.

Листинг 6. Чтение структуры CD с диска.

/*fread.c*/#include "stdio.h"main() { FILE *fp; struct CD { char name; char description; char category; float cost; int number; } disc; char filename; printf("Введите имя файла, который желаете открыть: "); gets(filename); if ((fp = fopen(filename, "r")) == NULL) { printf("Невозможно открыть файл %s\n", filename); exit(); } while (fread(&disc, sizeof(disc), 1, fp) == 1) { puts(disc.name); putchar("\n"); puts(disc.description); putchar("\n"); puts(disc.category); putchar("\n"); printf("%f", disc.cost); putchar("\n"); printf("%d", disc.number); } fclose(fp); }

В табл. 1 собраны все описанные способы ввода и вывода данных и показаны значения, которые возвращает каждая функция при невозможности продолжения чтения или записи данных.

Таблица 1. Функции ввода в файл и вывода из файла.

Чтение в массив

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

В Листинге 7 приведен текст программы, осуществляющей чтение информации из файла, содержащего данные о коллекции компакт-дисков, в массив структур CD (предполагается, что их количество не превышает 20). Индекс используется для того, чтобы каждая считанная из файла структура сохранялась в отдельном элементе массива disc. После того как очередная структура прочитана и выведена на экран, стоимость очередного диска добавляется к сумме, отражающей общую стоимость коллекции, а значение индекса и счетчика увеличивается за счет выполнения следующих инструкций:

Total = total + disc.cost;index++;count++;

Если бы нас интересовала только информация об общей стоимости и количестве экземпляров коллекции, можно было бы читать данные в структурную переменную, не используя массив, и просто подсчитывать значения переменных total и count. Однако если данные будут считаны в массив, вы сможете произвольным образом обращаться к структурам и печатать любую информацию.

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

Листинг 7. Чтение структуры в массив.

/*rarray.c*/#include "stdio.h"main() { FILE *fp; struct CD { char name; char description; char category; float cost; int number; } disc; int index, count; float total; count = 0; total = 0; char filename; printf("Введите имя файла данных: "); gets(filename); while ((fp = fopen(filename, "r")) == NULL) { printf("Невозможно открыть файл %s\n", filename); printf("Введите имя файла данных: "); gets(filename); } index = 0; while (fread(&disc, sizeof(disc), 1, fp) == 1) { puts(disc.name); putchar("\n"); puts(disc.description); putchar("\n"); puts(disc.category); putchar("\n"); printf("%f", disc.cost); putchar("\n"); printf("%d", disc.number); total = total + disc.cost; index++; count++; } fclose(fp); printf("Общая стоимость коллекции составляет %.2f\n", total); printf("Коллекция содержит %.d дисков\n", count); }

Листинг 8. Программа копирования содержимого файлов.

/*filecopy.c*/#include "stdio.h"main() { FILE *fp1, *fp2; char infile, outfile; int letter; printf("Введите имя файла для чтения: "); gets(infile); if ((fp1 = fopen(infile, "r")) == NULL) { printf("Невозможно открыть файл %s", infile); exit(); } printf("Введите имя файла для записи: "); gets(outfile); if ((fp2 = fopen(infile, "w")) == NULL) { printf("Невозможно открыть файл %s", outfile); fclose(fp1); exit(); } while ((letter = fgetc(fp1)) != EOF) { putchar(letter); fputc(letter, fp2); } fclose(fp1); fclose(fp2); }

Первый файл открывается с режимом доступа "r", чтобы можно было прочитать из него данные. Если файл невозможно открыть, программа завершается. Второй файл открывается с режимом доступа "w", что позволяет записывать в


Рис. 6. Функция fprintf() записывает числовые значения в виде текстовых символов

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

Функция fprintf() записывает все данные в виде текста. Например, если использовать fprintf() для записи числа 34.23 на диск, пять символов будут записаны так, как это показано на рис. 6. Если в дальнейшем для чтения данных из файла используется функция fscanf(), символы будут преобразованы в числовое значение и в таком виде записаны в переменную.

Вследствие того, что функция fprintf() записывает данные в виде текста, чтение из файла можно осуществлять и с помощью функций getc(), fgetc() или fgets(). Однако эти функции будут читать информацию в виде «печатных» символов. Например, если использовать функцию fgets(), числа будут считываться в виде символов, являющихся частью строки. При отображении на экране или печати на принтере данных, прочитанных с использованием функции fgets() или fgetc(), вы будете лишены возможности выполнения арифметических операций над отдельными элементами данных.

Двоичный формат

Для сохранения числовых переменных в двоичном формате используется функция fwrite(). Записанные таким образом данные на диске займут столько же места, сколько и в памяти. Если просмотреть содержимое такого файла с помощью команды TYPE, мы увидим на месте числовых значений бессмысленные буквы и значки. Это ASCII-символы, эквивалентные записанным в файл значениям.

Для чтения файла, записанного с помощью fwrite(), следует использовать функцию fread(). Вводить данные следует в структуру, имеющую строение, соответствующее сохраненным ранее данным. Структура может иметь другое имя, имена членов структуры тоже могут отличаться, но порядок, типы и размеры членов обеих структур должны совпадать.

Печать данных

С технической точки зрения вывести данные на принтер можно с помощью любой функции вывода: посимвольно, построчно, форматированными строками или структурами. Единственное, что необходимо, - это указать имя файла "prn" и режим доступа "w".

Однако «поструктурная» печать с помощью функции fwrite() практически не используется, так как числовые данные при этом будут напечатаны в двоичном формате в виде загадочных символов. Вместо этого для печати структур используется функция fprintf(), как это показано в Листинге 9. В этой программе открываются два файла: дисковый файл открывается для чтения, а файл принтера - для вывода.

Листинг 9. Чтение и печать содержимого дискового файла.

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

Инструкции

Fprintf(ptr, "\n\n");

выводят по две пустые строки между отдельными структурами CD.

Проектирование программы

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

Например, вам может понадобиться просмотреть дисковый файл в поисках определенной записи. В этом случае следует открыть файл с режимом доступа "r", а потом использовать цикл для постепенного ввода данных, структура за структурой или строка за строкой в зависимости от того, к какому типу относится информация, записанная в файл. Во время каждого прохождения цикла значения вводимых данных сравниваются с искомыми. Для проверки значений строк используйте функцию strcmp(), конечно, если ваш компилятор это позволяет. Как только искомые данные найдены, они выводятся на экран, после чего файл закрывается.

Файлы и файловые структуры

Логические времена устройств внешней памяти
К каждому компьютеру может быть подключено несколько устройств внешней памяти. Основным устройством внешней памяти ПК является жесткий диск. Обычно его делят на несколько логических разделов .

Наличие нескольких логических разделов на одном жестком диске обеспечивает пользователю следующие преимущества:


  • Можно хранить операционную систему в одном логическом разделе, а данные - в другом, что позволит переустанавливать операционную систему, не затрагивая данные;

  • На одном жестком диске в различные логические разделы можно установить разные операционные системы;

  • Обслуживание одного логического раздела не затрагивает другие разделы.

Устройства внешней памяти и логические разделы диска имеют логическое имя .

В ОС Windows приняты логические имена, состоящие из латинской буквы и двоеточия:


  • для дисководов гибких дисков (дискет) – A: и B:

  • для жестких дисков и логических разделов –C:, D:, E: и т.д.

  • для оптических дисководов – имена, следующие после жестких дисков (например, F:)

  • Для подключаемой к компьютеру флеш-памяти – следующее имя (например, G:)
В ОС Linux приняты другие правила именования дисков:

  • Логические разделы, принадлежащие первому жесткому диску – имена hda1, hda2 и т.д.;

  • Логические разделы, принадлежащие второму жесткому диску получают имена hdb1, hdb2 и т.д.
Все программы и данные хранятся во внешней памяти компьютера в виде файлов.
^ Файл – это поименованная область внешней памяти.
Файловая система – это часть ОС, определяющая способ организации, хранения и именования файлов на носителях информации.
Файл характеризуется набором параметров (имя, размер, дата создания, дата последнего изменения) и атрибутами, используемыми операционной системой для его обработки (архивный, системный, скрытый, только для чтения). Размер файла выражается в байтах.

Имя файла , как правило, состоит из двух частей, разделенных точкой: собственно имени файла и расширения .

Имя файлу дает пользователь. Расширение имени обычно задается программой автоматически при сохранении файла. Расширение позволяет пользователю его тип, а операционной системе открыть файл с помощью нужного приложения.
В ОС Windows в имени файла зап0рещено использование следующих символов: \, /, :, *, ?, ”, |. В Linux эти символы, кроме /, допустимы.

Операционная система Linux, в отличие от Windows, различают строчные и прописные буквы в имени файла: например FILE.txt, file.txt и FiLe.txt – это в Linux три разных файла.

Наиболее распространенные типы файлов и расширений:


Тип файла

Примеры расширений

Системный файл

drv, sys

Текстовый файл

txt, rtf, doc, docx, odt

Графический файл

bmp, gif, jpg, tif, png, psd

Web-страница

htm, html

Звуковой файл

wav, mp3, midi, kar, ogg

Видеофайл

avi, mpeg

Архив

zip, rar

Электронная таблица

xls, ods

Код (текст) программы на языках программирования

bas, pas

В ОС Linux выделяют следующие типы файлов:


  • обычные файлы – файлы с программами и данными

  • каталоги – файлы, содержащие информацию о каталогах

  • ссылки – файлы, содержащие ссылки на другие файлы

  • специальные файлы устройств – файлы, используемые для представления физических устройств компьютера (жестких и оптических дисководов, принтера, звуковых колонок и т.д.)

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

Каталог – это поименованная совокупность файлов и подкаталогов (вложенных каталогов).
Каталог самого верхнего уровня называется корневым каталогом .

В ОС Windows любой информационный носитель имеет корневой каталог, который создается операционной системой без участия пользователя. Обозначаются корневые каталоги добавлением к логическому имени соответствующего устройства внешней памяти знака «\» (обратный слеш): А:\, С:\, В:\ и т.д.

В Linux каталоги жестких дисков или их логических разделов не принадлежат верхнему уровню файловой системы (не являются корневыми каталогами). Они «монтируются» в каталог mnl. Другие устройства внешней памяти (гибкие, оптические и флеш-диски) «монтируются» в каталог media. Каталоги mnt и media в свою очередь, «монтируются» в единый корневой каталог, который обозначается знаком «/» (прямой слеш).

Файловая структура диска – это совокупность файлов на диске и взаимосвязей между ними.

Файловые структуры бывают простыми и многоуровневыми (иерархическими).

Простые файловые структуры могут использоваться для дисков с небольшим (до нескольких десятков) количеством файлов. В этом случае оглавление диска представляет собой линейную последовательность имен файлов.
Иерархические файловые структуры используются для хранения большого (сотни и тысячи) количества файлов. Иерархия – это расположение частей (элементов) целого в порядке от высшего к низшим.

Графическое изображение иерархической файловой структуры называется деревом .

Чтобы обратиться к нужному файлу, хранящемуся на некотором диске, можно указать путь к файлу – имена всех каталогов от корневого до того, в котором непосредственно находится файл.

Последовательно записанные путь к файлу и имя файла составляют полное имя файла .
Пример полного имени файла в ОС Windows:

E:\изображения\фото\Поездка.jpeg




Top