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

IN_MOVE — * — Сокращение для IN_MOVED_FROM | IN_MOVED_TO

IN_CLOSE — * — Сокращение для IN_CLOSE_WRITE | IN_CLOSE_NOWRITE

IN_DONT_FOLLOW — * — Не разыменовывать символьную ссылку (начиная с Linux 2.6.15)

IN_MASK_ADD — * — Добавить события в маску текущего элемента списка наблюдения для файла pathname

IN_ONESHOT — * — Наблюдать для файла pathname только одно событие

IN_ONLYDIR — * — Ошибка, если pathname не каталог (начиная с Linux 2.6.15)

IN_IGNORED — * — Элемент списка наблюдения был удален приложением или ядром

IN_ISDIR — * — Имя файла, возвращенное в name, — каталог

IN_Q_OVERFLOW — * — Переполнение очереди событий

IN_UNMOUNT — * — Файловая система, содержащая объект, была размонтирована


Значения большинства битов в табл. 19.1 ясны из их названий. Следующий список содержит пояснения некоторых деталей.

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

• Событие IN_DELETE_SELF происходит при удалении объекта наблюдения (файла или каталога). Событие IN_DELETE происходит при удалении одного из файлов, содержащегося в объекте наблюдения, если объект наблюдения — каталог.

• Событие IN_MOVE_SELF происходит при переименовании объекта наблюдения. События IN_MOVE_FROM и IN_MOVE_TO происходят при перемещении некоего объекта, находящегося внутри каталога, за которым ведется наблюдение. При этом первое событие происходит с каталогом, содержащим старое имя, а второе — с каталогом, содержащим новое.

• Биты IN_DONT_FOLLOW, IN_MASK_ADD, IN_ONESHOT и IN_ONLYDIR не устанавливают события, за свершением которых требуется вести наблюдение. Данные биты контролируют работу вызова inotify_and_watch().

• Бит IN_DONT_FOLLOW устанавливает, что аргумент pathname не подлежит разыменованию, если это символьная ссылка. Такое правило позволяет программе вести мониторинг самой символьной ссылки, а не файла, на который она указывает.

• При выполнении вызова inotify_and_watch() с параметром pathname, уже включенным в список наблюдения через файловый описатель inotify, по умолчанию произойдет перезапись имеющегося значения параметра mask данного элемента на новое, передаваемое с текущим вызовом. При указании бита IN_MASK_ADD текущая маска дополняется значением, переданным в атрибуте mask данного вызова.

• Бит IN_ONESHOT позволяет приложению осуществлять мониторинг только одного события pathname. После его свершения происходит автоматическое удаление соответствующего элемента списка наблюдения.

• Бит IN_ONLYDIR позволяет приложению осуществлять мониторинг, только если pathname — это каталог. Если нет, то вызов inotify_and_watch() завершается с ошибкой ENOTDIR. Использование данного флага позволяет избежать состояния гонки, которое могло бы возникнуть, если бы мы захотели удостовериться, что ведем наблюдение именно за каталогом.


19.4. Чтение событий inotify


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

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

struct inotify_event {

int wd; /* Дескриптор наблюдения, с которым произошло событие */

uint32_t mask; /* Биты, описывающие произошедшие события */

uint32_t cookie; /* Cookie для связанных событий (для rename()) */

uint32_t len; /* Размер поля 'name' */

char name[]; /* Опциональное имя файла с нуль-символом в конце */

};



Рис. 19.2. Входящий буфер, содержащий три структуры inotify_event


Поле wd сообщает нам дескриптор наблюдения, для которого произошло данное событие. Это поле содержит одно из значений, возвращенных предшествующим вызовом inotify_and_watch(). Поле wd полезно, когда приложение ведет мониторинг нескольких файлов или каталогов через один и тот же файловый дескриптор inotify, предоставляющий ссылку, позволяющую приложению определить, с каким конкретно файлом или каталогом произошло данное событие. (Однако для этого в приложении должна содержаться структура, связывающая дескрипторы наблюдения с путевыми именами).

Поле mask возвращает битовую маску, описывающую событие. Диапазон битов, которые могут появиться в поле mask, указаны в столбце Out табл. 19.1. Обратите внимание на приведенную ниже дополнительную информацию о некоторых битах.

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

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

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#.Введите сюда краткую аннотацию

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

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