FANOTIFY_MARK(2) | Руководство программиста Linux | FANOTIFY_MARK(2) |
ИМЯ¶
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
- Remove either all mount or all non-mount marks from the fanotify group. If flags contains FAN_MARK_MOUNT, all marks for mounts are removed from the group. Otherwise, all marks for directories and files are removed. No flag other than FAN_MARK_MOUNT can be used in conjunction with FAN_MARK_FLUSH. mask is ignored.
Если не задано ни одно из этих значений, или указано больше одного, то вызов завершается с ошибкой EINVAL.
Кроме этого в flags могут быть указаны (побитовым сложением):
- FAN_MARK_DONT_FOLLOW
- Если pathname — символьная ссылка, то помечается сама ссылка, а не файл, на который она ссылается (по умолчанию fanotify_mark() разыменовывает pathname, если это символьная ссылка).
- FAN_MARK_ONLYDIR
- Если объект файловой системы для пометки не является каталогом, то возвращается ошибка ENOTDIR.
- FAN_MARK_MOUNT
- Mark the mount point specified by pathname. If pathname is not itself a mount point, the mount point containing pathname will be marked. All directories, subdirectories, and the contained files of the mount point will be monitored.
- FAN_MARK_IGNORED_MASK
- События в mask должны быть добавлены или удалены из маски игнорирования.
- FAN_MARK_IGNORED_SURV_MODIFY
- Маска игнорирования должна остаться неизменной при событиях изменения. Если этот флаг не указан, то маска игнорирования очищается при появлении событий изменения игнорируемого файла или каталога.
В mask указывается какие события должны прослушиваться (или игнорироваться). Данная битовая маска состоит из следующих значений:
- FAN_ACCESS
- Создать событие при доступе (для чтения) к файлу или каталогу (но смотрите ДЕФЕКТЫ).
- FAN_MODIFY
- Создать событие при изменении (при записи) файла.
- FAN_CLOSE_WRITE
- Создать событие при закрытии файла, открытого на запись.
- FAN_CLOSE_NOWRITE
- Создать событие при закрытии файла или каталога, открытого только для чтения.
- FAN_OPEN
- Создать событие при открытии файла или каталога.
- FAN_Q_OVERFLOW
- Создать событие при переполнении очереди сообщений. Размер очереди сообщений ограничен 16384 элементами, если в fanotify_init(2) не указан FAN_UNLIMITED_QUEUE.
- FAN_OPEN_PERM
- Создать событие при запросе открытия файла или каталога. Требуется файловый дескриптор fanotify, созданный с FAN_CLASS_PRE_CONTENT или FAN_CLASS_CONTENT.
- FAN_ACCESS_PERM
- Создать событие при запросе чтения файла или каталога. Требуется файловый дескриптор fanotify, созданный с FAN_CLASS_PRE_CONTENT или FAN_CLASS_CONTENT.
- FAN_ONDIR
- Create events for directories—for example, when opendir(3), readdir(3) (but see BUGS), and closedir(3) are called. Without this flag, only events for files are created.
- FAN_EVENT_ON_CHILD
- Events for the immediate children of marked directories shall be created. The flag has no effect when marking mounts. Note that events are not generated for children of the subdirectories of marked directories. To monitor complete directory trees it is necessary to mark the relevant mount.
The following composed value is defined:
- FAN_CLOSE
- Файл закрыт (FAN_CLOSE_WRITE|FAN_CLOSE_NOWRITE).
Объект файловой системы для пометки задаётся файловым дескриптором dirfd и путём, указанным в pathname:
- Если значение pathname равно NULL, то в dirfd указан объект файловой системы для пометки.
- Если значение pathname равно NULL и dirfd равно специальному значению AT_FDCWD, то помечается текущий рабочий каталог.
- Если в pathname задан абсолютный путь, то им определяется объект файловой системы для пометки, а dirfd игнорируется.
- Если в pathname задан относительный путь и dirfd не равно AT_FDCWD, то помечаемый объект файловой системы определяется из pathname относительно каталога, заданного в dirfd.
- Если в pathname задан относительный путь и dirfd равно AT_FDCWD, то помечаемый объект файловой системы определяется из pathname относительно текущего рабочего каталога.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении fanotify_mark() возвращает 0; при ошибке возвращается -1, а в errno задаётся причина ошибки.
ОШИБКИ¶
- EBADF
- В fanotify_fd передан некорректный файловый дескриптор.
- EINVAL
- В flags или mask указано некорректное значение, или в fanotify_fd не файловый дескриптор fanotify.
- EINVAL
- The fanotify file descriptor was opened with FAN_CLASS_NOTIF and mask contains a flag for permission events (FAN_OPEN_PERM or 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 не проверяется на корректность.
СМ. ТАКЖЕ¶
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
8 октября 2016 г. | Linux |