ИМЯ 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)
|