Читаем Linux API. Исчерпывающее руководство полностью

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

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


14.1. Специальные файлы устройств


В текущей главе часто упоминаются дисковые устройства, поэтому мы начнем с краткого рассмотрения понятия «файл устройства».

Специальный файл устройства соответствует какому-либо устройству в системе. Внутри ядра каждому типу устройства соответствует драйвер устройства, который обрабатывает для него все запросы на ввод-вывод. Драйвер устройства — это модуль программного кода ядра, реализующий набор операций, которые (как правило) соответствуют операциям ввода-вывода на связанном аппаратном средстве. API, предоставляемый драйверами устройств, является фиксированным и содержит операции, соответствующие системным вызовам open(), close(), read(), write(), mmap() и ioctl(). Тот факт, что каждый драйвер устройства обеспечивает единый интерфейс, скрывающий различия в работе отдельных устройств, позволяет добиться универсальности ввода-вывода (см. раздел 4.2).

Некоторые устройства являются реальными, например мыши, диски и USB-накопители, другие — виртуальными. Это означает, что им не соответствует никакое аппаратное средство, а вместо него ядро предоставляет (с помощью драйвера устройства) абстрактное устройство с API таким же, как у реального устройства.

Устройства можно подразделить на два типа.

• Символьные — обрабатывают данные посимвольно. Примеры символьных устройств: терминалы и клавиатуры.

• Блочные — обрабатывают за один заход один блок данных. Размер блока зависит от типа устройства, но обычно является кратным 512 байтам. Примеры блочных устройств: диски и USB-накопители.

Файлы устройств располагаются внутри файловой системы, подобно другим файлам, обычно в каталоге /dev. Суперпользователь может создать файл устройства с помощью команды mknod. Эту же задачу можно выполнить в привилегированной (CAP_MKNOD) программе, используя системный вызов mknod().

Мы не рассматриваем подробно системный вызов mknod() («создать индексный дескриптор файловой системы»), поскольку его применение очевидно и единственное его назначение в настоящее время состоит в создании файлов устройств, что не является необходимым для типичного приложения. Можно также использовать вызов mknod() для организации очередей FIFO (см. раздел 44.7), однако предпочтительнее использовать функцию mkfifo(). Исторически в некоторых реализациях UNIX вызов mknod() применялся также для создания каталогов, но теперь вместо него используется системный вызов mkdir(). Тем не менее в некоторых реализациях UNIX (но не в Linux) такая возможность вызова mknod() сохранена для обратной совместимости. Дальнейшие подробности см. на странице mknod(2) руководства к ОС.

В ранних версиях Linux каталог /dev содержал записи для всех возможных устройств в системе, даже если такие устройства фактически не были подключены к нему. Это означало, что каталог /dev мог содержать буквально тысячи неиспользуемых записей, замедляющих работу команд, которым было необходимо просматривать его содержимое. При этом было невозможно использовать содержимое для того, чтобы выяснить, какие устройства действительно есть в системе. В Linux 2.6 эта проблема решена за счет программы-менеджера udev, которая опирается на файловую систему sysfs, экспортирующую информацию об устройствах и других объектах ядра в пространство пользователя через фиктивную файловую систему, смонтированную в каталоге /sys.

В статье [Kroah-Hartman, 2003] приведен обзор менеджера udev и указаны причины, по которым его следует считать лучше файловой системы devfs, призванной решать те же проблемы в Linux 2.4. Информацию о файловой системе sysfs можно найти в файле Documentation/filesystems/sysfs.txt Linux 2.6, а также в работе [Mochel, 2005].


Идентификаторы устройств

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

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных