Глава 11 Простое управление файлами

Глава 11

Простое управление файлами

Файлы — это наиболее распространенная абстракция ресурсов, используемая в мире Unix. Такие ресурсы, как память, дисковое пространство, устройства и каналы межпроцессного взаимодействия (IPC), могут быть представлены в виде файлов. Поддерживая унифицированную абстракцию для этих ресурсов, Unix уменьшает количество программных интерфейсов, которые обязан знать программист. Ниже перечислены ресурсы, доступные через файловые операции.

• Обычные файлы. Это то, о чем большинство пользователей компьютеров думают как о файлах. Они служат репозиториями данных, которые могут расти до необходимых размеров, и обеспечивают произвольный доступ. Файлы Unix являются байт-ориентированными — любое другое логическое представление является результатом программных преобразований; ядро ничего не знает о них.

• Каналы (pipes). Простейший механизм IPC в Unix. Обычно один процесс пишет информацию в канал в то время как другой читает из него. Каналы — это то, что командные оболочки используют для перенаправления ввода-вывода (например, ls -LR | grep notes или ls | more), и многие программы применяют каналы для того, чтобы передавать свой ввод программам, запущенным в виде их подпроцессов. Существуют два типа каналов: именованные и неименованные. Неименованные каналы создаются по мере необходимости и исчезают, как только читатель и писатель на концах канала закрывают его. Неименованные каналы называются так, потому что они не существуют в файловой системе и потому не имеют файловых имен[36]. Именованные каналы обладают именами файлов, и имя файла используется для того, чтобы позволить двум независимым процессам общаться через канал (подобно тому, как работают сокеты доменов Unix (см. главу 17)). Каналы также известны как FIFO (first-in-first-out), потому что данные упорядочены в манере "первым вошел — первым вышел".

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

• Файлы устройств. Большинство физических устройств представлены в виде файлов. Есть два типа файлов устройств: блочные устройства и символьные устройства. Файлы блочных устройств представляют аппаратные устройства[37], которые не могут быть прочитаны побайтно; они должны читаться блоками определенного размера. В Linux блочные устройства принимают специальное управление от ядра[38]и могут содержать файловые системы[39]. Дисковые приводы, включая CD-ROM и RAM-диски, являются наиболее часто используемыми блочными устройствами. Символьные устройства могут быть прочитаны по одному символу за раз, и ядро не представляет для них никаких средств кэширования или упорядочивания. Модемы, терминалы, принтеры, звуковые карты и мыши — все это символьные устройства. Традиционно к каждому из них привязана некая сущность в каталоге /dev, что позволяет пользовательским процессам получать доступ к ресурсам устройств как к файлам.

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

• Сокеты. Подобно каналам, сокеты представляют собой каналы IPC. Они более гибки, чем каналы, и могут создавать IPC-каналы между процессами, запущенными на разных машинах. Сокеты обсуждаются в главе 17.

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

Единственной уникальной отличительной чертой файла является его inode (от information node — информационный узел). Информационный узел файла содержит всю информацию о файле, включая права доступа, ассоциированные с ним, его текущий размер, количество имен, которые он имеет (оно может быть равно нулю, одному, двадцати или больше). Существуют два типа информационных узлов, in-core inode (информационный узел в ядре) — единственный тип, о котором нам нужно заботиться; каждый открытый файл в системе имеет его. Ядро отслеживает такие узлы в памяти, и они одинаковы для файловых систем всех типов. Другой тип узлов — on-disk inode (информационный узел на диске). Каждый файл в файловой системе имеет такой узел, и его точная структура зависит от типа файловой системы, в которой хранится файл.

Когда процесс открывает файл в файловой системе, on-disk inode загружается в память и превращается в in-core inode. Когда последний модифицируется, он трансформируется обратно в on-disk inode и сохраняется в файловой системе[40].

in-core inode и on-disk inode не содержат абсолютно одинаковую информацию. Так, например, только in-core inode отслеживает, сколько процессов в системе в данный момент используют файл, ассоциированный с ним.

Когда in-core inode и on-disk inode синхронизируются ядром, большинство системных вызовов завершаются обновлением этих узлов. Когда такое происходит, мы просто будем говорить об обновлении узла; это подразумевает, что изменением затронуты как in-core inode, так и on-disk inode. Некоторые файлы (такие как неименованные каналы), не имеют on-disk inode. В этом случае обновляется только in-core inode.

Имя файла существует только в каталоге, который связывает имя с on-disk inode. Вы можете воспринимать об именах файлов, как об указателях на дисковые узлы для файлов, ассоциированных с ними. Дисковый узел содержит в счетчике ссылок количество имен файлов, которые на него ссылаются. Когда файл удаляется, счетчик ссылок уменьшается на единицу, и если достигает 0, и ни один процесс не держит его открытым, то занятое файлом пространство освобождается. Если же другие процессы держат файл открытым, дисковое пространство освобождается тогда, когда последний из них закрывает файл.

Все это делает доступными следующие возможности.

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

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

• Можно изменить /tmp/foo и немедленно увидеть изменения в /tmp/bar, если оба имени файла ссылаются на один узел.

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 11 Работа с файлами и папками

Из книги Работа на ноутбуке автора Садовский Алексей

Глава 11 Работа с файлами и папками • Навигация по файлам и папкам• Операции с файлами и папкамиФайлы – это логическое представление информации, хранящейся в вашем компьютере, а также на всех внешних носителях (дискетах, компакт-дисках, flash-картах и т. д.). Физически все


Глава 2 Работа с файлами

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Глава 2 Работа с файлами Постановка задачи Разработать программу для работы с файлами. Программа должна предоставлять стандартные функции, используемые при работе с файлами: копирование, перенос,


Глава 7 Работа с файлами

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Глава 7 Работа с файлами • Создание нового документа• Сохранение документа• Открытие документа• Помещение файла в документ• Навигация по документуВ этой главе мы с вами научимся работать с файлами и документами, создавать, открывать и сохранять файлы программы Adobe


Глава 12 Работа с графическими файлами

Из книги Adobe InDesign CS3 автора Завгородний Владимир

Глава 12 Работа с графическими файлами Что делать в тех случаях, когда стандартных объектов и фигур Adobe InDesign для создания оформления нам не хватает? И самое главное: что делать, если нам не нужны кружочки и звездочки, а нужна фотография?В этой ситуации мы с вами должны


Управление файлами занятий

Из книги Microsoft Windows SharePoint Services 3.0. Русская версия. Главы 9-16 автора Лондер Ольга

Управление файлами занятий В инструкциях, приведенных в разделе «Использование компакт- диска», предполагается, что читатель использует Windows Vista. Единственным отличием при установке, использовании и удалении файлов занятий, включенных на компакт-диск, является папка, в


Глава 6 Работа с файлами и каталогами

Из книги Новейший самоучитель работы на компьютере автора Белунцов Валерий

Глава 6 Работа с файлами и каталогами ? Что нужно знать о файлах?? Каталоги.? Создание, копирование и перемещение файлов и


Управление файлами и каталогами

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Управление файлами и каталогами В этом разделе вводятся основные функции, предназначенные для управления файлами и


Управление файлами

Из книги VBA для чайников автора Каммингс Стив

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


Пример: простое управление задачами

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

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


Глава 18. Работа с файлами на диске.

Из книги Windows Vista. Трюки и эффекты автора Зозуля Юрий

Глава 18. Работа с файлами на диске. В этой главе ...~ Получение доступа к файлу по номеру~ Выбор режима доступа к файлу~ Чтение и запись в файлы с использованием не объектно-ориентированных методовВ дополнение к объектно-ориентированным методам работы с файлами данных,


Глава 4 Трюки с файлами и папками

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Глава 4 Трюки с файлами и папками • Особенности работы с программой Проводник• Тонкости использования встроенной системы поиска• Настройка контекстного меню• Хитрости выполнения файловых операций• Как восстанавливать удаленные файлы• Дополнительные свойства


Глава 12. Управление файлами и каталогами

Из книги автора

Глава 12. Управление файлами и каталогами 12.0. Введение Операционная система iOS основана на MacOS X, которая, в свою очередь, построена на базе операционной системы Unix. В iOS полная структура каталогов остается невидимой для приложения, поскольку каждое приложение, написанное


Geany и управление файлами

Из книги автора

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