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

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





ИМЯ


fanotify_init - создаёт и инициализирует группу fanotify



ОБЗОР


#include <fcntl.h>
#include <sys/fanotify.h>

int fanotify_init(unsigned int flags, unsigned int event_f_flags);



ОПИСАНИЕ


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

Вызов fanotify_init() инициализирует новую группу fanotify и возвращает файловый
дескриптор очереди событий, связанной с группой.

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

Несколько программ могут использовать интерфейс fanotify к одним и тем же файлам
одновременно.

В текущей реализации количество групп fanotify ограничено 128 на пользователя. Это
значение нельзя изменить.

Для вызова fanotify_init() требуется мандат CAP_SYS_ADMIN. Это требование может
быть облегчено в будущих версиях программного интерфейса. Поэтому ниже показаны
определённые дополнительные проверки возможностей, которые были реализованы.

Аргумент flags содержит многобитовое поле, определяющее класс уведомления,
запрашиваемый приложением, а также однобитовые поля, задающие поведение файлового
дескриптора.

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

В flags может быть указан только один из следующих классов уведомления:

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

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

FAN_CLASS_NOTIF

FAN_CLOEXEC
Устанавливать флаг close-on-exec (FD_CLOEXEC) для нового файлового
дескриптора. Смотрите описание флага O_CLOEXEC в open(2).

FAN_NONBLOCK
Включить неблокирующий флаг (O_NONBLOCK) для файлового дескриптора. Чтение
из такого файлового дескриптора не вызовет блокирования. Если данные
отсутствуют, то read(2) завершится с ошибкой EAGAIN.

FAN_UNLIMITED_QUEUE
Снять ограничение в 16384 события в очереди событий. Для использования
этого флага требуется мандат CAP_SYS_ADMIN.

FAN_UNLIMITED_MARKS
Снять ограничение в 8192 метки. Для использования этого флага требуется
мандат CAP_SYS_ADMIN.

В аргументе event_f_flags задаются флаги состояния файла, которые будут
установлены на открытые файловые описатели, создаваемые для событий fanotify.
Подробней об этих флагах смотрите описание значений flags в open(2). Аргумент
event_f_flags включает многобитовое поле для режима доступа. Это поел может иметь
следующие значения:

O_RDONLY
Это значение разрешает доступ только на чтение.

O_WRONLY
Это значение разрешает доступ только на запись.

O_RDWR Это значение разрешает доступ на чтение и запись.

В event_f_flags могут быть установлены дополнительные биты. Наиболее полезные
значения:

O_LARGEFILE
Включить поддержку файлов более 2 ГБ. Если не удастся установить этот флаг,
то при попытке открыть большой файл, отслеживаемый группой fanotify на
32-битной системе, возвращается ошибка EOVERFLOW.

O_CLOEXEC (начиная с Linux 3.18)
Включить флаг close-on-exec для нового открытого файлового дескриптора.
Смотрите описание флага O_CLOEXEC в open(2) для того, чтобы узнать как это
может пригодиться.

Также доступны следующие флаги: O_APPEND, O_DSYNC, O_NOATIME, O_NONBLOCK и O_SYNC.
Указание любых других флагов в event_f_flagsприводит к ошибке EINVAL (но смотрите
ДЕФЕКТЫ).



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


При успешном выполнении fanotify_init() возвращает новый файловый дескриптор. При
ошибке возвращается -1, и errno устанавливается в соответствующее значение.



ОШИБКИ


EINVAL В flags или event_f_flags указано некорректное значение. Значение
FAN_ALL_INIT_FLAGS определяет все допустимые биты в flags.


EPERM Операция запрещена, так как вызывающий не имеет мандата CAP_SYS_ADMIN.



ВЕРСИИ


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



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


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



ДЕФЕКТЫ


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

* При передаче в event_f_flags флаг O_CLOEXEC игнорируется.

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

* Значение аргумента event_f_flags не проверяется на корректность флагов. Могут
быть установлены флаги, предназначенные только для внутреннего использования,
такие как FMODE_EXEC, и в результате будут установлены для файловых
дескрипторов при чтении из файлового дескриптора fanotify.



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


fanotify_mark(2), fanotify(7)



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