diff options
Diffstat (limited to 'templates/man7/fanotify.7.pot')
-rw-r--r-- | templates/man7/fanotify.7.pot | 3047 |
1 files changed, 3047 insertions, 0 deletions
diff --git a/templates/man7/fanotify.7.pot b/templates/man7/fanotify.7.pot new file mode 100644 index 00000000..fffd8fce --- /dev/null +++ b/templates/man7/fanotify.7.pot @@ -0,0 +1,3047 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2024-03-01 16:56+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. type: TH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "fanotify" +msgstr "" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "2023-10-31" +msgstr "" + +#. type: TH +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "Linux man-pages 6.06" +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NAME" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "fanotify - monitoring filesystem events" +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "DESCRIPTION" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The fanotify API provides notification and interception of filesystem " +"events. Use cases include virus scanning and hierarchical storage " +"management. In the original fanotify API, only a limited set of events was " +"supported. In particular, there was no support for create, delete, and move " +"events. The support for those events was added in Linux 5.1. (See " +"B<inotify>(7) for details of an API that did notify those events pre Linux " +"5.1.)" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Additional capabilities compared to the B<inotify>(7) API include the " +"ability to monitor all of the objects in a mounted filesystem, the ability " +"to make access permission decisions, and the possibility to read or modify " +"files before access by other applications." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The following system calls are used with this API: B<fanotify_init>(2), " +"B<fanotify_mark>(2), B<read>(2), B<write>(2), and B<close>(2)." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "fanotify_init(), fanotify_mark(), and notification groups" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<fanotify_init>(2) system call creates and initializes an fanotify " +"notification group and returns a file descriptor referring to it." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"An fanotify notification group is a kernel-internal object that holds a list " +"of files, directories, filesystems, and mounts for which events shall be " +"created." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For each entry in an fanotify notification group, two bit masks exist: the " +"I<mark> mask and the I<ignore> mask. The mark mask defines file activities " +"for which an event shall be created. The ignore mask defines activities for " +"which no event shall be generated. Having these two types of masks permits " +"a filesystem, mount, or directory to be marked for receiving events, while " +"at the same time ignoring events for specific objects under a mount or " +"directory." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The B<fanotify_mark>(2) system call adds a file, directory, filesystem, or " +"mount to a notification group and specifies which events shall be reported " +"(or ignored), or removes or modifies such an entry." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A possible usage of the ignore mask is for a file cache. Events of interest " +"for a file cache are modification of a file and closing of the same. Hence, " +"the cached directory or mount is to be marked to receive these events. " +"After receiving the first event informing that a file has been modified, the " +"corresponding cache entry will be invalidated. No further modification " +"events for this file are of interest until the file is closed. Hence, the " +"modify event can be added to the ignore mask. Upon receiving the close " +"event, the modify event can be removed from the ignore mask and the file " +"cache entry can be updated." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The entries in the fanotify notification groups refer to files and " +"directories via their inode number and to mounts via their mount ID. If " +"files or directories are renamed or moved within the same mount, the " +"respective entries survive. If files or directories are deleted or moved to " +"another mount or if filesystems or mounts are unmounted, the corresponding " +"entries are deleted." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "The event queue" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"As events occur on the filesystem objects monitored by a notification group, " +"the fanotify system generates events that are collected in a queue. These " +"events can then be read (using B<read>(2) or similar) from the fanotify " +"file descriptor returned by B<fanotify_init>(2)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Two types of events are generated: I<notification> events and I<permission> " +"events. Notification events are merely informative and require no action to " +"be taken by the receiving application with one exception: if a valid file " +"descriptor is provided within a generic event, the file descriptor must be " +"closed. Permission events are requests to the receiving application to " +"decide whether permission for a file access shall be granted. For these " +"events, the recipient must write a response which decides whether access is " +"granted or not." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"An event is removed from the event queue of the fanotify group when it has " +"been read. Permission events that have been read are kept in an internal " +"list of the fanotify group until either a permission decision has been taken " +"by writing to the fanotify file descriptor or the fanotify file descriptor " +"is closed." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Reading fanotify events" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Calling B<read>(2) for the file descriptor returned by B<fanotify_init>(2) " +"blocks (if the flag B<FAN_NONBLOCK> is not specified in the call to " +"B<fanotify_init>(2)) until either a file event occurs or the call is " +"interrupted by a signal (see B<signal>(7))." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"After a successful B<read>(2), the read buffer contains one or more of the " +"following structures:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"struct fanotify_event_metadata {\n" +" __u32 event_len;\n" +" __u8 vers;\n" +" __u8 reserved;\n" +" __u16 metadata_len;\n" +" __aligned_u64 mask;\n" +" __s32 fd;\n" +" __s32 pid;\n" +"};\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Information records are supplemental pieces of information that may be " +"provided alongside the generic I<fanotify_event_metadata> structure. The " +"I<flags> passed to B<fanotify_init>(2) have influence over the type of " +"information records that may be returned for an event. For example, if a " +"notification group is initialized with B<FAN_REPORT_FID> or " +"B<FAN_REPORT_DIR_FID>, then event listeners should also expect to receive a " +"I<fanotify_event_info_fid> structure alongside the " +"I<fanotify_event_metadata> structure, whereby file handles are used to " +"identify filesystem objects rather than file descriptors. Information " +"records may also be stacked, meaning that using the various B<FAN_REPORT_*> " +"flags in conjunction with one another is supported. In such cases, multiple " +"information records can be returned for an event alongside the generic " +"I<fanotify_event_metadata> structure. For example, if a notification group " +"is initialized with B<FAN_REPORT_TARGET_FID> and B<FAN_REPORT_PIDFD>, then " +"an event listener should expect to receive up to two " +"I<fanotify_event_info_fid> information records and one " +"I<fanotify_event_info_pidfd> information record alongside the generic " +"I<fanotify_event_metadata> structure. Importantly, fanotify provides no " +"guarantee around the ordering of information records when a notification " +"group is initialized with a stacked based configuration. Each information " +"record has a nested structure of type I<fanotify_event_info_header>. It is " +"imperative for event listeners to inspect the I<info_type> field of this " +"structure in order to determine the type of information record that had been " +"received for a given event." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In cases where an fanotify group identifies filesystem objects by file " +"handles, event listeners should also expect to receive one or more of the " +"below information record objects alongside the generic " +"I<fanotify_event_metadata> structure within the read buffer:" +msgstr "" + +#. type: Plain text +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "" +"struct fanotify_event_info_fid {\n" +" struct fanotify_event_info_header hdr;\n" +" __kernel_fsid_t fsid;\n" +" unsigned char handle[];\n" +"};\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In cases where an fanotify group is initialized with B<FAN_REPORT_PIDFD>, " +"event listeners should expect to receive the below information record object " +"alongside the generic I<fanotify_event_metadata> structure within the read " +"buffer:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"struct fanotify_event_info_pidfd {\n" +" struct fanotify_event_info_header hdr;\n" +" __s32 pidfd;\n" +"};\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In case of a B<FAN_FS_ERROR> event, an additional information record " +"describing the error that occurred is returned alongside the generic " +"I<fanotify_event_metadata> structure within the read buffer. This structure " +"is defined as follows:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"struct fanotify_event_info_error {\n" +" struct fanotify_event_info_header hdr;\n" +" __s32 error;\n" +" __u32 error_count;\n" +"};\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"All information records contain a nested structure of type " +"I<fanotify_event_info_header>. This structure holds meta-information about " +"the information record that may have been returned alongside the generic " +"I<fanotify_event_metadata> structure. This structure is defined as follows:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"struct fanotify_event_info_header {\n" +"\t__u8 info_type;\n" +"\t__u8 pad;\n" +"\t__u16 len;\n" +"};\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For performance reasons, it is recommended to use a large buffer size (for " +"example, 4096 bytes), so that multiple events can be retrieved by a single " +"B<read>(2)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The return value of B<read>(2) is the number of bytes placed in the buffer, " +"or -1 in case of an error (but see BUGS)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The fields of the I<fanotify_event_metadata> structure are as follows:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<event_len>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is the length of the data for the current event and the offset to the " +"next event in the buffer. Unless the group identifies filesystem objects by " +"file handles, the value of I<event_len> is always " +"B<FAN_EVENT_METADATA_LEN>. For a group that identifies filesystem objects " +"by file handles, I<event_len> also includes the variable length file " +"identifier records." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<vers>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This field holds a version number for the structure. It must be compared to " +"B<FANOTIFY_METADATA_VERSION> to verify that the structures returned at run " +"time match the structures defined at compile time. In case of a mismatch, " +"the application should abandon trying to use the fanotify file descriptor." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<reserved>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "This field is not used." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<metadata_len>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is the length of the structure. The field was introduced to facilitate " +"the implementation of optional headers per event type. No such optional " +"headers exist in the current implementation." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<mask>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "This is a bit mask describing the event (see below)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<fd>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is an open file descriptor for the object being accessed, or " +"B<FAN_NOFD> if a queue overflow occurred. With an fanotify group that " +"identifies filesystem objects by file handles, applications should expect " +"this value to be set to B<FAN_NOFD> for each event that is received. The " +"file descriptor can be used to access the contents of the monitored file or " +"directory. The reading application is responsible for closing this file " +"descriptor." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"When calling B<fanotify_init>(2), the caller may specify (via the " +"I<event_f_flags> argument) various file status flags that are to be set on " +"the open file description that corresponds to this file descriptor. In " +"addition, the (kernel-internal) B<FMODE_NONOTIFY> file status flag is set " +"on the open file description. This flag suppresses fanotify event " +"generation. Hence, when the receiver of the fanotify event accesses the " +"notified file or directory using this file descriptor, no additional events " +"will be created." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<pid>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If flag B<FAN_REPORT_TID> was set in B<fanotify_init>(2), this is the TID of " +"the thread that caused the event. Otherwise, this the PID of the process " +"that caused the event." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A program listening to fanotify events can compare this PID to the PID " +"returned by B<getpid>(2), to determine whether the event is caused by the " +"listener itself, or is due to a file access by another process." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The bit mask in I<mask> indicates which events have occurred for a single " +"filesystem object. Multiple bits may be set in this mask, if more than one " +"event occurred for the monitored filesystem object. In particular, " +"consecutive events for the same filesystem object and originating from the " +"same process may be merged into a single event, with the exception that two " +"permission events are never merged into one queue entry." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The bits that may appear in I<mask> are as follows:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_ACCESS>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file or a directory (but see BUGS) was accessed (read)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_OPEN>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file or a directory was opened." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_OPEN_EXEC>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A file was opened with the intent to be executed. See NOTES in " +"B<fanotify_mark>(2) for additional details." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_ATTRIB>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file or directory metadata was changed." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_CREATE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A child file or directory was created in a watched parent." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_DELETE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A child file or directory was deleted in a watched parent." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_DELETE_SELF>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A watched file or directory was deleted." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_FS_ERROR>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A filesystem error was detected." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_RENAME>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A file or directory has been moved to or from a watched parent directory." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_MOVED_FROM>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file or directory has been moved from a watched parent directory." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_MOVED_TO>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file or directory has been moved to a watched parent directory." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_MOVE_SELF>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A watched file or directory was moved." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_MODIFY>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file was modified." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_CLOSE_WRITE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A file that was opened for writing (B<O_WRONLY> or B<O_RDWR>) was closed." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_CLOSE_NOWRITE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A file or directory that was opened read-only (B<O_RDONLY>) was closed." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_Q_OVERFLOW>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The event queue exceeded the limit on number of events. This limit can be " +"overridden by specifying the B<FAN_UNLIMITED_QUEUE> flag when calling " +"B<fanotify_init>(2)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_ACCESS_PERM>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"An application wants to read a file or directory, for example using " +"B<read>(2) or B<readdir>(2). The reader must write a response (as " +"described below) that determines whether the permission to access the " +"filesystem object shall be granted." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_OPEN_PERM>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"An application wants to open a file or directory. The reader must write a " +"response that determines whether the permission to open the filesystem " +"object shall be granted." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_OPEN_EXEC_PERM>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"An application wants to open a file for execution. The reader must write a " +"response that determines whether the permission to open the filesystem " +"object for execution shall be granted. See NOTES in B<fanotify_mark>(2) " +"for additional details." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "To check for any close event, the following bit mask may be used:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_CLOSE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file was closed. This is a synonym for:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "To check for any move event, the following bit mask may be used:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_MOVE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "A file or directory was moved. This is a synonym for:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "FAN_MOVED_FROM | FAN_MOVED_TO\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The following bits may appear in I<mask> only in conjunction with other " +"event type bits:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_ONDIR>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The events described in the I<mask> have occurred on a directory object. " +"Reporting events on directories requires setting this flag in the mark " +"mask. See B<fanotify_mark>(2) for additional details. The B<FAN_ONDIR> " +"flag is reported in an event mask only if the fanotify group identifies " +"filesystem objects by file handles." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Information records that are supplied alongside the generic " +"I<fanotify_event_metadata> structure will always contain a nested structure " +"of type I<fanotify_event_info_header>. The fields of the " +"I<fanotify_event_info_header> are as follows:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<info_type>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A unique integer value representing the type of information record object " +"received for an event. The value of this field can be set to one of the " +"following: B<FAN_EVENT_INFO_TYPE_FID>, B<FAN_EVENT_INFO_TYPE_DFID>, " +"B<FAN_EVENT_INFO_TYPE_DFID_NAME>, or B<FAN_EVENT_INFO_TYPE_PIDFD>. The " +"value set for this field is dependent on the flags that have been supplied " +"to B<fanotify_init>(2). Refer to the field details of each information " +"record object type below to understand the different cases in which the " +"I<info_type> values can be set." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<pad>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This field is currently not used by any information record object type and " +"therefore is set to zero." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<len>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The value of I<len> is set to the size of the information record object, " +"including the I<fanotify_event_info_header>. The total size of all " +"additional information records is not expected to be larger than " +"(I<event_len> - I<metadata_len>)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The fields of the I<fanotify_event_info_fid> structure are as follows:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<hdr>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a structure of type I<fanotify_event_info_header>. For example, " +"when an fanotify file descriptor is created using B<FAN_REPORT_FID>, a " +"single information record is expected to be attached to the event with " +"I<info_type> field value of B<FAN_EVENT_INFO_TYPE_FID>. When an fanotify " +"file descriptor is created using the combination of B<FAN_REPORT_FID> and " +"B<FAN_REPORT_DIR_FID>, there may be two information records attached to the " +"event: one with I<info_type> field value of B<FAN_EVENT_INFO_TYPE_DFID>, " +"identifying a parent directory object, and one with I<info_type> field value " +"of B<FAN_EVENT_INFO_TYPE_FID>, identifying a child object. Note that for " +"the directory entry modification events B<FAN_CREATE>, B<FAN_DELETE>, " +"B<FAN_MOVE>, and B<FAN_RENAME>, an information record identifying the " +"created/deleted/moved child object is reported only if an fanotify group was " +"initialized with the flag B<FAN_REPORT_TARGET_FID>." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<fsid>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a unique identifier of the filesystem containing the object " +"associated with the event. It is a structure of type I<__kernel_fsid_t> and " +"contains the same value as I<f_fsid> when calling B<statfs>(2)." +msgstr "" + +#. type: TP +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +#, no-wrap +msgid "I<handle>" +msgstr "" + +#. type: Plain text +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +msgid "" +"This field contains a variable-length structure of type I<struct " +"file_handle>. It is an opaque handle that corresponds to a specified object " +"on a filesystem as returned by B<name_to_handle_at>(2). It can be used to " +"uniquely identify a file on a filesystem and can be passed as an argument to " +"B<open_by_handle_at>(2). If the value of I<info_type> field is " +"B<FAN_EVENT_INFO_TYPE_DFID_NAME>, the file handle is followed by a null " +"terminated string that identifies the created/deleted/moved directory entry " +"name. For other events such as B<FAN_OPEN>, B<FAN_ATTRIB>, " +"B<FAN_DELETE_SELF>, and B<FAN_MOVE_SELF>, if the value of I<info_type> field " +"is B<FAN_EVENT_INFO_TYPE_FID>, the I<handle> identifies the object " +"correlated to the event. If the value of I<info_type> field is " +"B<FAN_EVENT_INFO_TYPE_DFID>, the I<handle> identifies the directory object " +"correlated to the event or the parent directory of a non-directory object " +"correlated to the event. If the value of I<info_type> field is " +"B<FAN_EVENT_INFO_TYPE_DFID_NAME>, the I<handle> identifies the same " +"directory object that would be reported with B<FAN_EVENT_INFO_TYPE_DFID> and " +"the file handle is followed by a null terminated string that identifies the " +"name of a directory entry in that directory, or '.' to identify the " +"directory object itself." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The fields of the I<fanotify_event_info_pidfd> structure are as follows:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a structure of type I<fanotify_event_info_header>. When an fanotify " +"group is initialized using B<FAN_REPORT_PIDFD>, the I<info_type> field value " +"of the I<fanotify_event_info_header> is set to B<FAN_EVENT_INFO_TYPE_PIDFD>." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<pidfd>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a process file descriptor that refers to the process responsible for " +"generating the event. The returned process file descriptor is no different " +"from one which could be obtained manually if B<pidfd_open>(2) were to be " +"called on I<fanotify_event_metadata.pid>. In the instance that an error is " +"encountered during pidfd creation, one of two possible error types " +"represented by a negative integer value may be returned in this I<pidfd> " +"field. In cases where the process responsible for generating the event has " +"terminated prior to the event listener being able to read events from the " +"notification queue, B<FAN_NOPIDFD> is returned. The pidfd creation for an " +"event is only performed at the time the events are read from the " +"notification queue. All other possible pidfd creation failures are " +"represented by B<FAN_EPIDFD>. Once the event listener has dealt with an " +"event and the pidfd is no longer required, the pidfd should be closed via " +"B<close>(2)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The fields of the I<fanotify_event_info_error> structure are as follows:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a structure of type I<fanotify_event_info_header>. The I<info_type> " +"field is set to B<FAN_EVENT_INFO_TYPE_ERROR>." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<error>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "Identifies the type of error that occurred." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<error_count>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a counter of the number of errors suppressed since the last error " +"was read." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The following macros are provided to iterate over a buffer containing " +"fanotify event metadata returned by a B<read>(2) from an fanotify file " +"descriptor:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_EVENT_OK(meta, len)>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This macro checks the remaining length I<len> of the buffer I<meta> against " +"the length of the metadata structure and the I<event_len> field of the first " +"metadata structure in the buffer." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_EVENT_NEXT(meta, len)>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This macro uses the length indicated in the I<event_len> field of the " +"metadata structure pointed to by I<meta> to calculate the address of the " +"next metadata structure that follows I<meta>. I<len> is the number of bytes " +"of metadata that currently remain in the buffer. The macro returns a " +"pointer to the next metadata structure that follows I<meta>, and reduces " +"I<len> by the number of bytes in the metadata structure that has been " +"skipped over (i.e., it subtracts I<meta-E<gt>event_len> from I<len>)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "In addition, there is:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<FAN_EVENT_METADATA_LEN>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This macro returns the size (in bytes) of the structure " +"I<fanotify_event_metadata>. This is the minimum size (and currently the " +"only size) of any event metadata." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Monitoring an fanotify file descriptor for events" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"When an fanotify event occurs, the fanotify file descriptor indicates as " +"readable when passed to B<epoll>(7), B<poll>(2), or B<select>(2)." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Dealing with permission events" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"For permission events, the application must B<write>(2) a structure of the " +"following form to the fanotify file descriptor:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"struct fanotify_response {\n" +" __s32 fd;\n" +" __u32 response;\n" +"};\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The fields of this structure are as follows:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is the file descriptor from the structure I<fanotify_event_metadata>." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<response>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This field indicates whether or not the permission is to be granted. Its " +"value must be either B<FAN_ALLOW> to allow the file operation or B<FAN_DENY> " +"to deny the file operation." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If access is denied, the requesting application call will receive an " +"B<EPERM> error. Additionally, if the notification group has been created " +"with the B<FAN_ENABLE_AUDIT> flag, then the B<FAN_AUDIT> flag can be set in " +"the I<response> field. In that case, the audit subsystem will log " +"information about the access decision to the audit logs." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Monitoring filesystems for errors" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"A single B<FAN_FS_ERROR> event is stored per filesystem at once. Extra " +"error messages are suppressed and accounted for in the I<error_count> field " +"of the existing B<FAN_FS_ERROR> event record, but details about the errors " +"are lost." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Errors reported by B<FAN_FS_ERROR> are generic I<errno> values, but not all " +"kinds of error types are reported by all filesystems." +msgstr "" + +#. type: Plain text +#: archlinux fedora-40 fedora-rawhide mageia-cauldron +msgid "" +"Errors not directly related to a file (i.e. super block corruption) are " +"reported with an invalid I<handle>. For these errors, the I<handle> will " +"have the field I<handle_type> set to B<FILEID_INVALID>, and the handle " +"buffer size set to B<0>." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Closing the fanotify file descriptor" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"When all file descriptors referring to the fanotify notification group are " +"closed, the fanotify group is released and its resources are freed for reuse " +"by the kernel. Upon B<close>(2), outstanding permission events will be set " +"to allowed." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "/proc interfaces" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The file I</proc/>pidI</fdinfo/>fd contains information about fanotify marks " +"for file descriptor I<fd> of process I<pid>. See B<proc>(5) for details." +msgstr "" + +#. commit 5b8fea65d197f408bb00b251c70d842826d6b70b +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Since Linux 5.13, the following interfaces can be used to control the amount " +"of kernel resources consumed by fanotify:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I</proc/sys/fs/fanotify/max_queued_events>" +msgstr "" + +#. commit 5b8fea65d197f408bb00b251c70d842826d6b70b +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The value in this file is used when an application calls " +"B<fanotify_init>(2) to set an upper limit on the number of events that can " +"be queued to the corresponding fanotify group. Events in excess of this " +"limit are dropped, but an B<FAN_Q_OVERFLOW> event is always generated. " +"Prior to Linux kernel 5.13, the hardcoded limit was 16384 events." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I</proc/sys/fs/fanotify/max_user_group>" +msgstr "" + +#. commit 5b8fea65d197f408bb00b251c70d842826d6b70b +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This specifies an upper limit on the number of fanotify groups that can be " +"created per real user ID. Prior to Linux kernel 5.13, the hardcoded limit " +"was 128 groups per user." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I</proc/sys/fs/fanotify/max_user_marks>" +msgstr "" + +#. commit 5b8fea65d197f408bb00b251c70d842826d6b70b +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This specifies an upper limit on the number of fanotify marks that can be " +"created per real user ID. Prior to Linux kernel 5.13, the hardcoded limit " +"was 8192 marks per group (not per user)." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "ERRORS" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In addition to the usual errors for B<read>(2), the following errors can " +"occur when reading from the fanotify file descriptor:" +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EINVAL>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The buffer is too small to hold the event." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<EMFILE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The per-process limit on the number of open files has been reached. See the " +"description of B<RLIMIT_NOFILE> in B<getrlimit>(2)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<ENFILE>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The system-wide limit on the total number of open files has been reached. " +"See I</proc/sys/fs/file-max> in B<proc>(5)." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<ETXTBSY>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This error is returned by B<read>(2) if B<O_RDWR> or B<O_WRONLY> was " +"specified in the I<event_f_flags> argument when calling B<fanotify_init>(2) " +"and an event occurred for a monitored file that is currently being executed." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"In addition to the usual errors for B<write>(2), the following errors can " +"occur when writing to the fanotify file descriptor:" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Fanotify access permissions are not enabled in the kernel configuration or " +"the value of I<response> in the response structure is not valid." +msgstr "" + +#. type: TP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "B<ENOENT>" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The file descriptor I<fd> in the response structure is not valid. This may " +"occur when a response for the permission event has already been written." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "STANDARDS" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "Linux." +msgstr "" + +#. type: SH +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "HISTORY" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The fanotify API was introduced in Linux 2.6.36 and enabled in Linux " +"2.6.37. fdinfo support was added in Linux 3.8." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "NOTES" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The fanotify API is available only if the kernel was built with the " +"B<CONFIG_FANOTIFY> configuration option enabled. In addition, fanotify " +"permission handling is available only if the " +"B<CONFIG_FANOTIFY_ACCESS_PERMISSIONS> configuration option is enabled." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Limitations and caveats" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Fanotify reports only events that a user-space program triggers through the " +"filesystem API. As a result, it does not catch remote events that occur on " +"network filesystems." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The fanotify API does not report file accesses and modifications that may " +"occur because of B<mmap>(2), B<msync>(2), and B<munmap>(2)." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Events for directories are created only if the directory itself is opened, " +"read, and closed. Adding, removing, or changing children of a marked " +"directory does not create events for the monitored directory itself." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Fanotify monitoring of directories is not recursive: to monitor " +"subdirectories under a directory, additional marks must be created. The " +"B<FAN_CREATE> event can be used for detecting when a subdirectory has been " +"created under a marked directory. An additional mark must then be set on " +"the newly created subdirectory. This approach is racy, because it can lose " +"events that occurred inside the newly created subdirectory, before a mark is " +"added on that subdirectory. Monitoring mounts offers the capability to " +"monitor a whole directory tree in a race-free manner. Monitoring " +"filesystems offers the capability to monitor changes made from any mount of " +"a filesystem instance in a race-free manner." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "The event queue can overflow. In this case, events are lost." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "BUGS" +msgstr "" + +#. commit 820c12d5d6c0890bc93dd63893924a13041fdc35 +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Before Linux 3.19, B<fallocate>(2) did not generate fanotify events. Since " +"Linux 3.19, calls to B<fallocate>(2) generate B<FAN_MODIFY> events." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "As of Linux 3.17, the following bugs exist:" +msgstr "" + +#. type: IP +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "\\[bu]" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"On Linux, a filesystem object may be accessible through multiple paths, for " +"example, a part of a filesystem may be remounted using the I<--bind> option " +"of B<mount>(8). A listener that marked a mount will be notified only of " +"events that were triggered for a filesystem object using the same mount. " +"Any other event will pass unnoticed." +msgstr "" + +#. FIXME . A patch was proposed. +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"When an event is generated, no check is made to see whether the user ID of " +"the receiving process has authorization to read or write the file before " +"passing a file descriptor for that file. This poses a security risk, when " +"the B<CAP_SYS_ADMIN> capability is set for programs executed by unprivileged " +"users." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"If a call to B<read>(2) processes multiple events from the fanotify queue " +"and an error occurs, the return value will be the total length of the events " +"successfully copied to the user-space buffer before the error occurred. The " +"return value will not be -1, and I<errno> will not be set. Thus, the " +"reading application has no way to detect the error." +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "EXAMPLES" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The two example programs below demonstrate the usage of the fanotify API." +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Example program: fanotify_example.c" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The first program is an example of fanotify being used with its event object " +"information passed in the form of a file descriptor. The program marks the " +"mount passed as a command-line argument and waits for events of type " +"B<FAN_OPEN_PERM> and B<FAN_CLOSE_WRITE>. When a permission event occurs, a " +"B<FAN_ALLOW> response is given." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The following shell session shows an example of running this program. This " +"session involved editing the file I</home/user/temp/notes>. Before the file " +"was opened, a B<FAN_OPEN_PERM> event occurred. After the file was closed, a " +"B<FAN_CLOSE_WRITE> event occurred. Execution of the program ends when the " +"user presses the ENTER key." +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"# B<./fanotify_example /home>\n" +"Press enter key to terminate.\n" +"Listening for events.\n" +"FAN_OPEN_PERM: File /home/user/temp/notes\n" +"FAN_CLOSE_WRITE: File /home/user/temp/notes\n" +"\\&\n" +"Listening for events stopped.\n" +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Program source: fanotify_example.c" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"#define _GNU_SOURCE /* Needed to get O_LARGEFILE definition */\n" +"#include E<lt>errno.hE<gt>\n" +"#include E<lt>fcntl.hE<gt>\n" +"#include E<lt>limits.hE<gt>\n" +"#include E<lt>poll.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>sys/fanotify.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"\\&\n" +"/* Read all available fanotify events from the file descriptor \\[aq]fd\\[aq]. */\n" +"\\&\n" +"static void\n" +"handle_events(int fd)\n" +"{\n" +" const struct fanotify_event_metadata *metadata;\n" +" struct fanotify_event_metadata buf[200];\n" +" ssize_t len;\n" +" char path[PATH_MAX];\n" +" ssize_t path_len;\n" +" char procfd_path[PATH_MAX];\n" +" struct fanotify_response response;\n" +"\\&\n" +" /* Loop while events can be read from fanotify file descriptor. */\n" +"\\&\n" +" for (;;) {\n" +"\\&\n" +" /* Read some events. */\n" +"\\&\n" +" len = read(fd, buf, sizeof(buf));\n" +" if (len == -1 && errno != EAGAIN) {\n" +" perror(\"read\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* Check if end of available data reached. */\n" +"\\&\n" +" if (len E<lt>= 0)\n" +" break;\n" +"\\&\n" +" /* Point to the first event in the buffer. */\n" +"\\&\n" +" metadata = buf;\n" +"\\&\n" +" /* Loop over all events in the buffer. */\n" +"\\&\n" +" while (FAN_EVENT_OK(metadata, len)) {\n" +"\\&\n" +" /* Check that run-time and compile-time structures match. */\n" +"\\&\n" +" if (metadata-E<gt>vers != FANOTIFY_METADATA_VERSION) {\n" +" fprintf(stderr,\n" +" \"Mismatch of fanotify metadata version.\\en\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* metadata-E<gt>fd contains either FAN_NOFD, indicating a\n" +" queue overflow, or a file descriptor (a nonnegative\n" +" integer). Here, we simply ignore queue overflow. */\n" +"\\&\n" +" if (metadata-E<gt>fd E<gt>= 0) {\n" +"\\&\n" +" /* Handle open permission event. */\n" +"\\&\n" +" if (metadata-E<gt>mask & FAN_OPEN_PERM) {\n" +" printf(\"FAN_OPEN_PERM: \");\n" +"\\&\n" +" /* Allow file to be opened. */\n" +"\\&\n" +" response.fd = metadata-E<gt>fd;\n" +" response.response = FAN_ALLOW;\n" +" write(fd, &response, sizeof(response));\n" +" }\n" +"\\&\n" +" /* Handle closing of writable file event. */\n" +"\\&\n" +" if (metadata-E<gt>mask & FAN_CLOSE_WRITE)\n" +" printf(\"FAN_CLOSE_WRITE: \");\n" +"\\&\n" +" /* Retrieve and print pathname of the accessed file. */\n" +"\\&\n" +" snprintf(procfd_path, sizeof(procfd_path),\n" +" \"/proc/self/fd/%d\", metadata-E<gt>fd);\n" +" path_len = readlink(procfd_path, path,\n" +" sizeof(path) - 1);\n" +" if (path_len == -1) {\n" +" perror(\"readlink\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" path[path_len] = \\[aq]\\e0\\[aq];\n" +" printf(\"File %s\\en\", path);\n" +"\\&\n" +" /* Close the file descriptor of the event. */\n" +"\\&\n" +" close(metadata-E<gt>fd);\n" +" }\n" +"\\&\n" +" /* Advance to next event. */\n" +"\\&\n" +" metadata = FAN_EVENT_NEXT(metadata, len);\n" +" }\n" +" }\n" +"}\n" +"\\&\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" char buf;\n" +" int fd, poll_num;\n" +" nfds_t nfds;\n" +" struct pollfd fds[2];\n" +"\\&\n" +" /* Check mount point is supplied. */\n" +"\\&\n" +" if (argc != 2) {\n" +" fprintf(stderr, \"Usage: %s MOUNT\\en\", argv[0]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" printf(\"Press enter key to terminate.\\en\");\n" +"\\&\n" +" /* Create the file descriptor for accessing the fanotify API. */\n" +"\\&\n" +" fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT | FAN_NONBLOCK,\n" +" O_RDONLY | O_LARGEFILE);\n" +" if (fd == -1) {\n" +" perror(\"fanotify_init\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* Mark the mount for:\n" +" - permission events before opening files\n" +" - notification events after closing a write-enabled\n" +" file descriptor. */\n" +"\\&\n" +" if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,\n" +" FAN_OPEN_PERM | FAN_CLOSE_WRITE, AT_FDCWD,\n" +" argv[1]) == -1) {\n" +" perror(\"fanotify_mark\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* Prepare for polling. */\n" +"\\&\n" +" nfds = 2;\n" +"\\&\n" +" fds[0].fd = STDIN_FILENO; /* Console input */\n" +" fds[0].events = POLLIN;\n" +"\\&\n" +" fds[1].fd = fd; /* Fanotify input */\n" +" fds[1].events = POLLIN;\n" +"\\&\n" +" /* This is the loop to wait for incoming events. */\n" +"\\&\n" +" printf(\"Listening for events.\\en\");\n" +"\\&\n" +" while (1) {\n" +" poll_num = poll(fds, nfds, -1);\n" +" if (poll_num == -1) {\n" +" if (errno == EINTR) /* Interrupted by a signal */\n" +" continue; /* Restart poll() */\n" +"\\&\n" +" perror(\"poll\"); /* Unexpected error */\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" if (poll_num E<gt> 0) {\n" +" if (fds[0].revents & POLLIN) {\n" +"\\&\n" +" /* Console input is available: empty stdin and quit. */\n" +"\\&\n" +" while (read(STDIN_FILENO, &buf, 1) E<gt> 0 && buf != \\[aq]\\en\\[aq])\n" +" continue;\n" +" break;\n" +" }\n" +"\\&\n" +" if (fds[1].revents & POLLIN) {\n" +"\\&\n" +" /* Fanotify events are available. */\n" +"\\&\n" +" handle_events(fd);\n" +" }\n" +" }\n" +" }\n" +"\\&\n" +" printf(\"Listening for events stopped.\\en\");\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Example program: fanotify_fid.c" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The second program is an example of fanotify being used with a group that " +"identifies objects by file handles. The program marks the filesystem object " +"that is passed as a command-line argument and waits until an event of type " +"B<FAN_CREATE> has occurred. The event mask indicates which type of " +"filesystem object\\[em]either a file or a directory\\[em]was created. Once " +"all events have been read from the buffer and processed accordingly, the " +"program simply terminates." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The following shell sessions show two different invocations of this program, " +"with different actions performed on a watched object." +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The first session shows a mark being placed on I</home/user>. This is " +"followed by the creation of a regular file, I</home/user/testfile.txt>. " +"This results in a B<FAN_CREATE> event being generated and reported against " +"the file's parent watched directory object and with the created file name. " +"Program execution ends once all events captured within the buffer have been " +"processed." +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"# B<./fanotify_fid /home/user>\n" +"Listening for events.\n" +"FAN_CREATE (file created):\n" +" Directory /home/user has been modified.\n" +" Entry \\[aq]testfile.txt\\[aq] is not a subdirectory.\n" +"All events processed successfully. Program exiting.\n" +"\\&\n" +"$ B<touch /home/user/testfile.txt> # In another terminal\n" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"The second session shows a mark being placed on I</home/user>. This is " +"followed by the creation of a directory, I</home/user/testdir>. This " +"specific action results in a B<FAN_CREATE> event being generated and is " +"reported with the B<FAN_ONDIR> flag set and with the created directory name." +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"# B<./fanotify_fid /home/user>\n" +"Listening for events.\n" +"FAN_CREATE | FAN_ONDIR (subdirectory created):\n" +" Directory /home/user has been modified.\n" +" Entry \\[aq]testdir\\[aq] is a subdirectory.\n" +"All events processed successfully. Program exiting.\n" +"\\&\n" +"$ B<mkdir -p /home/user/testdir> # In another terminal\n" +msgstr "" + +#. type: SS +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "Program source: fanotify_fid.c" +msgstr "" + +#. type: Plain text +#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron +#: opensuse-tumbleweed +#, no-wrap +msgid "" +"#define _GNU_SOURCE\n" +"#include E<lt>errno.hE<gt>\n" +"#include E<lt>fcntl.hE<gt>\n" +"#include E<lt>limits.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>sys/types.hE<gt>\n" +"#include E<lt>sys/stat.hE<gt>\n" +"#include E<lt>sys/fanotify.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +"\\&\n" +"#define BUF_SIZE 256\n" +"\\&\n" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int fd, ret, event_fd, mount_fd;\n" +" ssize_t len, path_len;\n" +" char path[PATH_MAX];\n" +" char procfd_path[PATH_MAX];\n" +" char events_buf[BUF_SIZE];\n" +" struct file_handle *file_handle;\n" +" struct fanotify_event_metadata *metadata;\n" +" struct fanotify_event_info_fid *fid;\n" +" const char *file_name;\n" +" struct stat sb;\n" +"\\&\n" +" if (argc != 2) {\n" +" fprintf(stderr, \"Invalid number of command line arguments.\\en\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" mount_fd = open(argv[1], O_DIRECTORY | O_RDONLY);\n" +" if (mount_fd == -1) {\n" +" perror(argv[1]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* Create an fanotify file descriptor with FAN_REPORT_DFID_NAME as\n" +" a flag so that program can receive fid events with directory\n" +" entry name. */\n" +"\\&\n" +" fd = fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME, 0);\n" +" if (fd == -1) {\n" +" perror(\"fanotify_init\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* Place a mark on the filesystem object supplied in argv[1]. */\n" +"\\&\n" +" ret = fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_ONLYDIR,\n" +" FAN_CREATE | FAN_ONDIR,\n" +" AT_FDCWD, argv[1]);\n" +" if (ret == -1) {\n" +" perror(\"fanotify_mark\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" printf(\"Listening for events.\\en\");\n" +"\\&\n" +" /* Read events from the event queue into a buffer. */\n" +"\\&\n" +" len = read(fd, events_buf, sizeof(events_buf));\n" +" if (len == -1 && errno != EAGAIN) {\n" +" perror(\"read\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" /* Process all events within the buffer. */\n" +"\\&\n" +" for (metadata = (struct fanotify_event_metadata *) events_buf;\n" +" FAN_EVENT_OK(metadata, len);\n" +" metadata = FAN_EVENT_NEXT(metadata, len)) {\n" +" fid = (struct fanotify_event_info_fid *) (metadata + 1);\n" +" file_handle = (struct file_handle *) fid-E<gt>handle;\n" +"\\&\n" +" /* Ensure that the event info is of the correct type. */\n" +"\\&\n" +" if (fid-E<gt>hdr.info_type == FAN_EVENT_INFO_TYPE_FID ||\n" +" fid-E<gt>hdr.info_type == FAN_EVENT_INFO_TYPE_DFID) {\n" +" file_name = NULL;\n" +" } else if (fid-E<gt>hdr.info_type == FAN_EVENT_INFO_TYPE_DFID_NAME) {\n" +" file_name = file_handle-E<gt>f_handle +\n" +" file_handle-E<gt>handle_bytes;\n" +" } else {\n" +" fprintf(stderr, \"Received unexpected event info type.\\en\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" if (metadata-E<gt>mask == FAN_CREATE)\n" +" printf(\"FAN_CREATE (file created):\\en\");\n" +"\\&\n" +" if (metadata-E<gt>mask == (FAN_CREATE | FAN_ONDIR))\n" +" printf(\"FAN_CREATE | FAN_ONDIR (subdirectory created):\\en\");\n" +"\\&\n" +"\t/* metadata-E<gt>fd is set to FAN_NOFD when the group identifies\n" +"\t objects by file handles. To obtain a file descriptor for\n" +"\t the file object corresponding to an event you can use the\n" +"\t struct file_handle that\\[aq]s provided within the\n" +"\t fanotify_event_info_fid in conjunction with the\n" +"\t open_by_handle_at(2) system call. A check for ESTALE is\n" +"\t done to accommodate for the situation where the file handle\n" +"\t for the object was deleted prior to this system call. */\n" +"\\&\n" +" event_fd = open_by_handle_at(mount_fd, file_handle, O_RDONLY);\n" +" if (event_fd == -1) {\n" +" if (errno == ESTALE) {\n" +" printf(\"File handle is no longer valid. \"\n" +" \"File has been deleted\\en\");\n" +" continue;\n" +" } else {\n" +" perror(\"open_by_handle_at\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +" }\n" +"\\&\n" +" snprintf(procfd_path, sizeof(procfd_path), \"/proc/self/fd/%d\",\n" +" event_fd);\n" +"\\&\n" +" /* Retrieve and print the path of the modified dentry. */\n" +"\\&\n" +" path_len = readlink(procfd_path, path, sizeof(path) - 1);\n" +" if (path_len == -1) {\n" +" perror(\"readlink\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +"\\&\n" +" path[path_len] = \\[aq]\\e0\\[aq];\n" +" printf(\"\\etDirectory \\[aq]%s\\[aq] has been modified.\\en\", path);\n" +"\\&\n" +" if (file_name) {\n" +" ret = fstatat(event_fd, file_name, &sb, 0);\n" +" if (ret == -1) {\n" +" if (errno != ENOENT) {\n" +" perror(\"fstatat\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +" printf(\"\\etEntry \\[aq]%s\\[aq] does not exist.\\en\", file_name);\n" +" } else if ((sb.st_mode & S_IFMT) == S_IFDIR) {\n" +" printf(\"\\etEntry \\[aq]%s\\[aq] is a subdirectory.\\en\", file_name);\n" +" } else {\n" +" printf(\"\\etEntry \\[aq]%s\\[aq] is not a subdirectory.\\en\",\n" +" file_name);\n" +" }\n" +" }\n" +"\\&\n" +" /* Close associated file descriptor for this event. */\n" +"\\&\n" +" close(event_fd);\n" +" }\n" +"\\&\n" +" printf(\"All events processed successfully. Program exiting.\\en\");\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: SH +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "SEE ALSO" +msgstr "" + +#. type: Plain text +#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide +#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed +msgid "B<fanotify_init>(2), B<fanotify_mark>(2), B<inotify>(7)" +msgstr "" + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "2023-02-05" +msgstr "" + +#. type: TH +#: debian-bookworm +#, no-wrap +msgid "Linux man-pages 6.03" +msgstr "" + +#. type: Plain text +#: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "" +"struct fanotify_event_info_fid {\n" +" struct fanotify_event_info_header hdr;\n" +" __kernel_fsid_t fsid;\n" +" unsigned char file_handle[0];\n" +"};\n" +msgstr "" + +#. type: TP +#: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed +#, no-wrap +msgid "I<file_handle>" +msgstr "" + +#. type: Plain text +#: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"This is a variable length structure of type struct file_handle. It is an " +"opaque handle that corresponds to a specified object on a filesystem as " +"returned by B<name_to_handle_at>(2). It can be used to uniquely identify a " +"file on a filesystem and can be passed as an argument to " +"B<open_by_handle_at>(2). If the value of I<info_type> field is " +"B<FAN_EVENT_INFO_TYPE_DFID_NAME>, the file handle is followed by a null " +"terminated string that identifies the created/deleted/moved directory entry " +"name. For other events such as B<FAN_OPEN>, B<FAN_ATTRIB>, " +"B<FAN_DELETE_SELF>, and B<FAN_MOVE_SELF>, if the value of I<info_type> field " +"is B<FAN_EVENT_INFO_TYPE_FID>, the I<file_handle> identifies the object " +"correlated to the event. If the value of I<info_type> field is " +"B<FAN_EVENT_INFO_TYPE_DFID>, the I<file_handle> identifies the directory " +"object correlated to the event or the parent directory of a non-directory " +"object correlated to the event. If the value of I<info_type> field is " +"B<FAN_EVENT_INFO_TYPE_DFID_NAME>, the I<file_handle> identifies the same " +"directory object that would be reported with B<FAN_EVENT_INFO_TYPE_DFID> and " +"the file handle is followed by a null terminated string that identifies the " +"name of a directory entry in that directory, or '.' to identify the " +"directory object itself." +msgstr "" + +#. type: Plain text +#: debian-bookworm debian-unstable opensuse-leap-15-6 opensuse-tumbleweed +msgid "" +"Errors not directly related to a file (i.e. super block corruption) are " +"reported with an invalid I<file_handle>. For these errors, the " +"I<file_handle> will have the field I<handle_type> set to B<FILEID_INVALID>, " +"and the handle buffer size set to B<0>." +msgstr "" + +#. type: Plain text +#: debian-bookworm +msgid "" +"The file I</proc/[pid]/fdinfo/[fd]> contains information about fanotify " +"marks for file descriptor I<fd> of process I<pid>. See B<proc>(5) for " +"details." +msgstr "" + +#. type: SH +#: debian-bookworm +#, no-wrap +msgid "VERSIONS" +msgstr "" + +#. type: Plain text +#: debian-bookworm +msgid "" +"The fanotify API was introduced in Linux 2.6.36 and enabled in Linux " +"2.6.37. Fdinfo support was added in Linux 3.8." +msgstr "" + +#. type: Plain text +#: debian-bookworm +msgid "The fanotify API is Linux-specific." +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"# B<./fanotify_example /home>\n" +"Press enter key to terminate.\n" +"Listening for events.\n" +"FAN_OPEN_PERM: File /home/user/temp/notes\n" +"FAN_CLOSE_WRITE: File /home/user/temp/notes\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "Listening for events stopped.\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"#define _GNU_SOURCE /* Needed to get O_LARGEFILE definition */\n" +"#include E<lt>errno.hE<gt>\n" +"#include E<lt>fcntl.hE<gt>\n" +"#include E<lt>limits.hE<gt>\n" +"#include E<lt>poll.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>sys/fanotify.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "/* Read all available fanotify events from the file descriptor \\[aq]fd\\[aq]. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"static void\n" +"handle_events(int fd)\n" +"{\n" +" const struct fanotify_event_metadata *metadata;\n" +" struct fanotify_event_metadata buf[200];\n" +" ssize_t len;\n" +" char path[PATH_MAX];\n" +" ssize_t path_len;\n" +" char procfd_path[PATH_MAX];\n" +" struct fanotify_response response;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Loop while events can be read from fanotify file descriptor. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " for (;;) {\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Read some events. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" len = read(fd, buf, sizeof(buf));\n" +" if (len == -1 && errno != EAGAIN) {\n" +" perror(\"read\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Check if end of available data reached. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (len E<lt>= 0)\n" +" break;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Point to the first event in the buffer. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " metadata = buf;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Loop over all events in the buffer. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " while (FAN_EVENT_OK(metadata, len)) {\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Check that run-time and compile-time structures match. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (metadata-E<gt>vers != FANOTIFY_METADATA_VERSION) {\n" +" fprintf(stderr,\n" +" \"Mismatch of fanotify metadata version.\\en\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* metadata-E<gt>fd contains either FAN_NOFD, indicating a\n" +" queue overflow, or a file descriptor (a nonnegative\n" +" integer). Here, we simply ignore queue overflow. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " if (metadata-E<gt>fd E<gt>= 0) {\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Handle open permission event. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (metadata-E<gt>mask & FAN_OPEN_PERM) {\n" +" printf(\"FAN_OPEN_PERM: \");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Allow file to be opened. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" response.fd = metadata-E<gt>fd;\n" +" response.response = FAN_ALLOW;\n" +" write(fd, &response, sizeof(response));\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Handle closing of writable file event. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (metadata-E<gt>mask & FAN_CLOSE_WRITE)\n" +" printf(\"FAN_CLOSE_WRITE: \");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Retrieve and print pathname of the accessed file. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" snprintf(procfd_path, sizeof(procfd_path),\n" +" \"/proc/self/fd/%d\", metadata-E<gt>fd);\n" +" path_len = readlink(procfd_path, path,\n" +" sizeof(path) - 1);\n" +" if (path_len == -1) {\n" +" perror(\"readlink\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" path[path_len] = \\[aq]\\e0\\[aq];\n" +" printf(\"File %s\\en\", path);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Close the file descriptor of the event. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" close(metadata-E<gt>fd);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Advance to next event. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" metadata = FAN_EVENT_NEXT(metadata, len);\n" +" }\n" +" }\n" +"}\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" char buf;\n" +" int fd, poll_num;\n" +" nfds_t nfds;\n" +" struct pollfd fds[2];\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Check mount point is supplied. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (argc != 2) {\n" +" fprintf(stderr, \"Usage: %s MOUNT\\en\", argv[0]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " printf(\"Press enter key to terminate.\\en\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Create the file descriptor for accessing the fanotify API. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT | FAN_NONBLOCK,\n" +" O_RDONLY | O_LARGEFILE);\n" +" if (fd == -1) {\n" +" perror(\"fanotify_init\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* Mark the mount for:\n" +" - permission events before opening files\n" +" - notification events after closing a write-enabled\n" +" file descriptor. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,\n" +" FAN_OPEN_PERM | FAN_CLOSE_WRITE, AT_FDCWD,\n" +" argv[1]) == -1) {\n" +" perror(\"fanotify_mark\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Prepare for polling. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " nfds = 2;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" fds[0].fd = STDIN_FILENO; /* Console input */\n" +" fds[0].events = POLLIN;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" fds[1].fd = fd; /* Fanotify input */\n" +" fds[1].events = POLLIN;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* This is the loop to wait for incoming events. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " printf(\"Listening for events.\\en\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" while (1) {\n" +" poll_num = poll(fds, nfds, -1);\n" +" if (poll_num == -1) {\n" +" if (errno == EINTR) /* Interrupted by a signal */\n" +" continue; /* Restart poll() */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" perror(\"poll\"); /* Unexpected error */\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (poll_num E<gt> 0) {\n" +" if (fds[0].revents & POLLIN) {\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Console input is available: empty stdin and quit. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" while (read(STDIN_FILENO, &buf, 1) E<gt> 0 && buf != \\[aq]\\en\\[aq])\n" +" continue;\n" +" break;\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " if (fds[1].revents & POLLIN) {\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Fanotify events are available. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" handle_events(fd);\n" +" }\n" +" }\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" printf(\"Listening for events stopped.\\en\");\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"# B<./fanotify_fid /home/user>\n" +"Listening for events.\n" +"FAN_CREATE (file created):\n" +" Directory /home/user has been modified.\n" +" Entry \\[aq]testfile.txt\\[aq] is not a subdirectory.\n" +"All events processed successfully. Program exiting.\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "$ B<touch /home/user/testfile.txt> # In another terminal\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"# B<./fanotify_fid /home/user>\n" +"Listening for events.\n" +"FAN_CREATE | FAN_ONDIR (subdirectory created):\n" +" Directory /home/user has been modified.\n" +" Entry \\[aq]testdir\\[aq] is a subdirectory.\n" +"All events processed successfully. Program exiting.\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "$ B<mkdir -p /home/user/testdir> # In another terminal\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"#define _GNU_SOURCE\n" +"#include E<lt>errno.hE<gt>\n" +"#include E<lt>fcntl.hE<gt>\n" +"#include E<lt>limits.hE<gt>\n" +"#include E<lt>stdio.hE<gt>\n" +"#include E<lt>stdlib.hE<gt>\n" +"#include E<lt>sys/types.hE<gt>\n" +"#include E<lt>sys/stat.hE<gt>\n" +"#include E<lt>sys/fanotify.hE<gt>\n" +"#include E<lt>unistd.hE<gt>\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "#define BUF_SIZE 256\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"int\n" +"main(int argc, char *argv[])\n" +"{\n" +" int fd, ret, event_fd, mount_fd;\n" +" ssize_t len, path_len;\n" +" char path[PATH_MAX];\n" +" char procfd_path[PATH_MAX];\n" +" char events_buf[BUF_SIZE];\n" +" struct file_handle *file_handle;\n" +" struct fanotify_event_metadata *metadata;\n" +" struct fanotify_event_info_fid *fid;\n" +" const char *file_name;\n" +" struct stat sb;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (argc != 2) {\n" +" fprintf(stderr, \"Invalid number of command line arguments.\\en\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" mount_fd = open(argv[1], O_DIRECTORY | O_RDONLY);\n" +" if (mount_fd == -1) {\n" +" perror(argv[1]);\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" /* Create an fanotify file descriptor with FAN_REPORT_DFID_NAME as\n" +" a flag so that program can receive fid events with directory\n" +" entry name. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" fd = fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME, 0);\n" +" if (fd == -1) {\n" +" perror(\"fanotify_init\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Place a mark on the filesystem object supplied in argv[1]. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" ret = fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_ONLYDIR,\n" +" FAN_CREATE | FAN_ONDIR,\n" +" AT_FDCWD, argv[1]);\n" +" if (ret == -1) {\n" +" perror(\"fanotify_mark\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Read events from the event queue into a buffer. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" len = read(fd, events_buf, sizeof(events_buf));\n" +" if (len == -1 && errno != EAGAIN) {\n" +" perror(\"read\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Process all events within the buffer. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" for (metadata = (struct fanotify_event_metadata *) events_buf;\n" +" FAN_EVENT_OK(metadata, len);\n" +" metadata = FAN_EVENT_NEXT(metadata, len)) {\n" +" fid = (struct fanotify_event_info_fid *) (metadata + 1);\n" +" file_handle = (struct file_handle *) fid-E<gt>handle;\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Ensure that the event info is of the correct type. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (fid-E<gt>hdr.info_type == FAN_EVENT_INFO_TYPE_FID ||\n" +" fid-E<gt>hdr.info_type == FAN_EVENT_INFO_TYPE_DFID) {\n" +" file_name = NULL;\n" +" } else if (fid-E<gt>hdr.info_type == FAN_EVENT_INFO_TYPE_DFID_NAME) {\n" +" file_name = file_handle-E<gt>f_handle +\n" +" file_handle-E<gt>handle_bytes;\n" +" } else {\n" +" fprintf(stderr, \"Received unexpected event info type.\\en\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (metadata-E<gt>mask == FAN_CREATE)\n" +" printf(\"FAN_CREATE (file created):\\en\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (metadata-E<gt>mask == (FAN_CREATE | FAN_ONDIR))\n" +" printf(\"FAN_CREATE | FAN_ONDIR (subdirectory created):\\en\");\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +"\t/* metadata-E<gt>fd is set to FAN_NOFD when the group identifies\n" +"\t objects by file handles. To obtain a file descriptor for\n" +"\t the file object corresponding to an event you can use the\n" +"\t struct file_handle that\\[aq]s provided within the\n" +"\t fanotify_event_info_fid in conjunction with the\n" +"\t open_by_handle_at(2) system call. A check for ESTALE is\n" +"\t done to accommodate for the situation where the file handle\n" +"\t for the object was deleted prior to this system call. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" event_fd = open_by_handle_at(mount_fd, file_handle, O_RDONLY);\n" +" if (event_fd == -1) {\n" +" if (errno == ESTALE) {\n" +" printf(\"File handle is no longer valid. \"\n" +" \"File has been deleted\\en\");\n" +" continue;\n" +" } else {\n" +" perror(\"open_by_handle_at\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" snprintf(procfd_path, sizeof(procfd_path), \"/proc/self/fd/%d\",\n" +" event_fd);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Retrieve and print the path of the modified dentry. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" path_len = readlink(procfd_path, path, sizeof(path) - 1);\n" +" if (path_len == -1) {\n" +" perror(\"readlink\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" path[path_len] = \\[aq]\\e0\\[aq];\n" +" printf(\"\\etDirectory \\[aq]%s\\[aq] has been modified.\\en\", path);\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" if (file_name) {\n" +" ret = fstatat(event_fd, file_name, &sb, 0);\n" +" if (ret == -1) {\n" +" if (errno != ENOENT) {\n" +" perror(\"fstatat\");\n" +" exit(EXIT_FAILURE);\n" +" }\n" +" printf(\"\\etEntry \\[aq]%s\\[aq] does not exist.\\en\", file_name);\n" +" } else if ((sb.st_mode & S_IFMT) == S_IFDIR) {\n" +" printf(\"\\etEntry \\[aq]%s\\[aq] is a subdirectory.\\en\", file_name);\n" +" } else {\n" +" printf(\"\\etEntry \\[aq]%s\\[aq] is not a subdirectory.\\en\",\n" +" file_name);\n" +" }\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid " /* Close associated file descriptor for this event. */\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" close(event_fd);\n" +" }\n" +msgstr "" + +#. type: Plain text +#: debian-bookworm opensuse-leap-15-6 +#, no-wrap +msgid "" +" printf(\"All events processed successfully. Program exiting.\\en\");\n" +" exit(EXIT_SUCCESS);\n" +"}\n" +msgstr "" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "2023-05-03" +msgstr "" + +#. type: TH +#: debian-unstable opensuse-tumbleweed +#, no-wrap +msgid "Linux man-pages 6.05.01" +msgstr "" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "2023-04-03" +msgstr "" + +#. type: TH +#: opensuse-leap-15-6 +#, no-wrap +msgid "Linux man-pages 6.04" +msgstr "" |