Главная » 2017 » Ноябрь » 17 » man 2 fanotify_mark
01:42
man 2 fanotify_mark

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


fanotify_mark - добавляет, удаляет или изменяет метку fanotify для объекта
файловой системы



ОБЗОР


#include <sys/fanotify.h>

int fanotify_mark(int fanotify_fd, unsigned int flags,
uint64_t mask, int dirfd, const char *pathname);



ОПИСАНИЕ


Обзор программного интерфейса fanotify смотрите в fanotify(7).

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

Аргумент fanotify_fd — файловый дескриптор, возвращаемый fanotify_init(2).

Аргумент flags — битовая маска, описывающая выполняемое изменение. Она должна
содержать только одно значение из:

FAN_MARK_ADD
События в mask будут добавлены в маску меток (или в маску игнорирования).
Если значение mask пусто, то возвращается ошибка EINVAL.

FAN_MARK_REMOVE
События в mask будут удалены из маски меток (или маски игнорирования). Если
значение mask пусто, то возвращается ошибка EINVAL.

FAN_MARK_FLUSH
Будут удалены все метки для смонтированных или несмонтированных точек из
группы fanotify. Если flags содержит FAN_MARK_MOUNT, то все метки для точек
монтирования удаляются из группы. В противном случае удаляются все метки
для каталогов и файлов. Другие флаги, кроме FAN_MARK_MOUNT, нельзя
использовать вместе с FAN_MARK_FLUSH. Значение mask игнорируется.

Если не задано ни одно из этих значений, или указано больше одного, то вызов
завершается с ошибкой EINVAL.

Кроме этого в flags могут быть указаны (побитовым сложением):

FAN_MARK_DONT_FOLLOW
Если pathname — символьная ссылка, то помечается сама ссылка, а не файл, на
который она ссылается (по умолчанию fanotify_mark() разыменовывает
pathname, если это символьная ссылка).

FAN_MARK_ONLYDIR
Если объект файловой системы для пометки не является каталогом, то
возвращается ошибка ENOTDIR.

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

Данная битовая маска состоит из следующих значений:

FAN_ACCESS
Создать событие при доступе (для чтения) к файлу или каталогу (но смотрите
ДЕФЕКТЫ).

FAN_MODIFY
Создать событие при изменении (при записи) файла.

FAN_CLOSE_WRITE
Создать событие при закрытии файла, открытого на запись.

FAN_CLOSE_NOWRITE
Создать событие при закрытии файла или каталога, открытого только для
чтения.

FAN_OPEN
Создать событие при открытии файла или каталога.

FAN_OPEN_PERM
Создать событие при запросе открытия файла или каталога. Требуется файловый
дескриптор fanotify, созданный с FAN_CLASS_p_CONTENT или
FAN_CLASS_CONTENT.

FAN_ACCESS_PERM
Создать событие при запросе чтения файла или каталога. Требуется файловый
дескриптор fanotify, созданный с FAN_CLASS_p_CONTENT или
FAN_CLASS_CONTENT.

FAN_ONDIR
Создать события для каталогов, например при вызове opendir(3), readdir(3)
(но смотрите ДЕФЕКТЫ) и closedir(3). Без этого флага будут создаваться
события только для файлов.

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

Определены следующие составные значения:

FAN_CLOSE
Файл закрыт (FAN_CLOSE_WRITE|FAN_CLOSE_NOWRITE).

Объект файловой системы для пометки задаётся файловым дескриптором dirfd и путём,
указанным в pathname:

* Если значение pathname равно NULL, то в dirfd указан объект файловой системы
для пометки.

* Если значение pathname равно NULL и dirfd равно специальному значению AT_FDCWD,
то помечается текущий рабочий каталог.

* Если в pathname задан абсолютный путь, то им определяется объект файловой
системы для пометки, а dirfd игнорируется.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении fanotify_mark() возвращает 0; при ошибке возвращается -1,
а в errno задаётся причина ошибки.



ОШИБКИ


EBADF В fanotify_fd передан некорректный файловый дескриптор.

EINVAL В flags или mask указано некорректное значение, или в fanotify_fd не
файловый дескриптор fanotify.

EINVAL Файловые дескриптор fanotify был открыт с FAN_CLASS_NOTIF и маска содержит
флаг для событий доступа (FAN_OPEN_PERM или FAN_ACCESS_PERM).

ENOENT Объект файловой системы, указанный в dirfd и pathname, не существует. Эта
ошибка также возникает при попытке удаления метки с не помеченного объекта.

ENOMEM Невозможно выделить необходимую память.

ENOSPC Количество меток превышает ограничение в 8192 и флаг FAN_UNLIMITED_MARKS не
был указан при создании файлового дескриптора fanotify с помощью
fanotify_init(2).

ENOSYS В этом ядре не реализован fanotify_mark(). Программный интерфейс fanotify
доступен только, если ядро было собрано с параметром CONFIG_FANOTIFY.

ENOTDIR
В значении flags содержится FAN_MARK_ONLYDIR, а в dirfd и pathname указан
не каталог.



ВЕРСИИ


Вызов fanotify_mark() появился в версии 2.6.36 ядра Linux и был включён в версии
2.6.37.



СООТВЕТСТВИЕ СТАНДАРТАМ


Данный системный вызов есть только в Linux.



ДЕФЕКТЫ


В ядрах Linux до версии 3.16 существуют следующие дефекты:

* Если flags содержит FAN_MARK_FLUSH, то dirfd и pathname должны задавать
корректный объект файловой системы, даже если этот объект не используется.

* Вызов readdir(2) не генерирует событие FAN_ACCESS.

* Если fanotify_mark() вызван с FAN_MARK_FLUSH, то значение flags не проверяется
на корректность.



СМОТРИТЕ ТАКЖЕ


fanotify_init(2), fanotify(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 458 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar