summaryrefslogtreecommitdiffstats
path: root/templates/man7/fanotify.7.pot
diff options
context:
space:
mode:
Diffstat (limited to 'templates/man7/fanotify.7.pot')
-rw-r--r--templates/man7/fanotify.7.pot3047
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 ""