summaryrefslogtreecommitdiffstats
path: root/po/ru/man7/epoll.7.po
diff options
context:
space:
mode:
Diffstat (limited to 'po/ru/man7/epoll.7.po')
-rw-r--r--po/ru/man7/epoll.7.po1321
1 files changed, 1321 insertions, 0 deletions
diff --git a/po/ru/man7/epoll.7.po b/po/ru/man7/epoll.7.po
new file mode 100644
index 00000000..9b5eae4d
--- /dev/null
+++ b/po/ru/man7/epoll.7.po
@@ -0,0 +1,1321 @@
+# Russian translation of manpages
+# This file is distributed under the same license as the manpages-l10n package.
+# Copyright © of this file:
+# Azamat Hackimov <azamat.hackimov@gmail.com>, 2012.
+# Yuri Kozlov <yuray@komyakino.ru>, 2011-2019.
+# Иван Павлов <pavia00@gmail.com>, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: manpages-l10n\n"
+"POT-Creation-Date: 2024-03-01 16:55+0100\n"
+"PO-Revision-Date: 2019-10-05 07:57+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <man-pages-ru-talks@lists.sourceforge.net>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
+"X-Generator: Lokalize 2.0\n"
+
+#. type: TH
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "epoll"
+msgstr ""
+
+#. type: TH
+#: archlinux fedora-40 fedora-rawhide mageia-cauldron
+#, no-wrap
+msgid "2023-10-31"
+msgstr "31 октября 2023 г."
+
+#. type: TH
+#: archlinux fedora-40 fedora-rawhide mageia-cauldron
+#, no-wrap
+msgid "Linux man-pages 6.06"
+msgstr "Linux man-pages 6.06"
+
+#. 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 "epoll - I/O event notification facility"
+msgstr "epoll - средство уведомления о событии ввода-вывода"
+
+#. type: SH
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "СИНТАКСИС"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "B<#include E<lt>sys/epoll.hE<gt>>\n"
+msgstr "B<#include E<lt>sys/epoll.hE<gt>>\n"
+
+#. 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 B<epoll> API performs a similar task to B<poll>(2): monitoring multiple "
+"file descriptors to see if I/O is possible on any of them. The B<epoll> API "
+"can be used either as an edge-triggered or a level-triggered interface and "
+"scales well to large numbers of watched file descriptors."
+msgstr ""
+"Программный интерфейс B<epoll> выполняется схожую с B<poll>(2) задачу: "
+"следит за несколькими файловыми дескрипторами и ждёт, когда станет возможен "
+"ввод-вывод для одного из них. Программный интерфейс B<epoll> можно "
+"использовать либо в режиме edge-triggered, либо в level-triggered и "
+"применять для слежения за достаточно большим количеством файловых "
+"дескрипторов."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The central concept of the B<epoll> API is the B<epoll> I<instance>, an in-"
+"kernel data structure which, from a user-space perspective, can be "
+"considered as a container for two lists:"
+msgstr ""
+"Центральным элементом программного интерфейса B<epoll> является I<экземпляр> "
+"B<epoll> — структура данных ядра, которая с точки зрения пользовательского "
+"пространства может рассматриваться как контейнер с двумя списками:"
+
+#. type: IP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "\\[bu]"
+msgstr "\\[bu]"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The I<interest> list (sometimes also called the B<epoll> set): the set of "
+"file descriptors that the process has registered an interest in monitoring."
+msgstr ""
+"Список I<interest> (иногда также называемый набором B<epoll>): набор "
+"файловых дескрипторов, которые зарегистрировал процесс для слежения."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, fuzzy
+#| msgid ""
+#| "The I<ready> list: the set of file descriptors that are \"ready\" for I/"
+#| "O. The ready list is a subset of (or, more precisely, a set of "
+#| "references to) the file descriptors in the interest list that is "
+#| "dynamically populated by the kernel as a result of I/O activity on those "
+#| "file descriptors."
+msgid ""
+"The I<ready> list: the set of file descriptors that are \"ready\" for I/O. "
+"The ready list is a subset of (or, more precisely, a set of references to) "
+"the file descriptors in the interest list. The ready list is dynamically "
+"populated by the kernel as a result of I/O activity on those file "
+"descriptors."
+msgstr ""
+"Список I<ready>: набор файловых дескрипторов, которые «готовы» для "
+"проведения операций ввода-вывода. Список ready — это часть набора (точнее, "
+"набор ссылок) файловых дескрипторов из списка interest, он динамически "
+"заполняется ядром в результате действий ввода-вывода с этими файловыми "
+"дескрипторами."
+
+#. 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 provided to create and manage an B<epoll> "
+"instance:"
+msgstr ""
+"Для создания и управления экземпляром B<epoll> служат следующие системные "
+"вызовы:"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"B<epoll_create>(2) creates a new B<epoll> instance and returns a file "
+"descriptor referring to that instance. (The more recent "
+"B<epoll_create1>(2) extends the functionality of B<epoll_create>(2).)"
+msgstr ""
+"Вызов B<epoll_create>(2) создаёт экземпляр новый B<epoll> и возвращает "
+"файловый дескриптор, указывающий на этот экземпляр (более новый "
+"B<epoll_create1>(2) расширяет возможности B<epoll_create>(2))."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Interest in particular file descriptors is then registered via "
+"B<epoll_ctl>(2), which adds items to the interest list of the B<epoll> "
+"instance."
+msgstr ""
+"Затем с помощью B<epoll_ctl>(2) регистрируются интересующие файловые "
+"дескрипторы, который добавляет их в список interest экземпляра I<epoll>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"B<epoll_wait>(2) waits for I/O events, blocking the calling thread if no "
+"events are currently available. (This system call can be thought of as "
+"fetching items from the ready list of the B<epoll> instance.)"
+msgstr ""
+"Вызов B<epoll_wait>(2) ждёт наступления событий ввода-вывода, блокируя "
+"вызывающую нить, если события пока недоступны (данный системный вызов можно "
+"рассматривать как выборщике элементов из списка готовности экземпляра "
+"B<epoll>)."
+
+#. type: SS
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "Level-triggered and edge-triggered"
+msgstr "Режимы level-triggered и edge-triggered"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The B<epoll> event distribution interface is able to behave both as edge-"
+"triggered (ET) and as level-triggered (LT). The difference between the two "
+"mechanisms can be described as follows. Suppose that this scenario happens:"
+msgstr ""
+"Существует два режима выдачи событий B<epoll>: edge-triggered (ET) и level-"
+"triggered (LT). Разницу между ними можно описать так. Предположим, что "
+"реализован следующий сценарий событий:"
+
+#. type: IP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "(1)"
+msgstr "(1)"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The file descriptor that represents the read side of a pipe (I<rfd>) is "
+"registered on the B<epoll> instance."
+msgstr ""
+"Файловый дескриптор, представляющий читающую сторону канала (I<rfd>), "
+"регистрируется в экземпляре B<epoll>."
+
+#. type: IP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "(2)"
+msgstr "(2)"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "A pipe writer writes 2\\ kB of data on the write side of the pipe."
+msgstr ""
+"Пишущая сторона канала записывает 2\\ КБ данных на записываемой стороне "
+"канала."
+
+#. type: IP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "(3)"
+msgstr "(3)"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"A call to B<epoll_wait>(2) is done that will return I<rfd> as a ready file "
+"descriptor."
+msgstr ""
+"Вызов B<epoll_wait>(2) завершается и возвращает I<rfd> как готовый файловый "
+"дескриптор."
+
+#. type: IP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "(4)"
+msgstr "(4)"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "The pipe reader reads 1\\ kB of data from I<rfd>."
+msgstr "Читающая сторона канала считывает 1\\ КБ данных из I<rfd>."
+
+#. type: IP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "(5)"
+msgstr "(5)"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "A call to B<epoll_wait>(2) is done."
+msgstr "Вызов B<epoll_wait>(2) завершается."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"If the I<rfd> file descriptor has been added to the B<epoll> interface using "
+"the B<EPOLLET> (edge-triggered) flag, the call to B<epoll_wait>(2) done in "
+"step B<5> will probably hang despite the available data still present in the "
+"file input buffer; meanwhile the remote peer might be expecting a response "
+"based on the data it already sent. The reason for this is that edge-"
+"triggered mode delivers events only when changes occur on the monitored file "
+"descriptor. So, in step B<5> the caller might end up waiting for some data "
+"that is already present inside the input buffer. In the above example, an "
+"event on I<rfd> will be generated because of the write done in B<2> and the "
+"event is consumed in B<3>. Since the read operation done in B<4> does not "
+"consume the whole buffer data, the call to B<epoll_wait>(2) done in step "
+"B<5> might block indefinitely."
+msgstr ""
+"Если файловый дескриптор I<rfd> добавлен к экземпляру B<epoll> с указанным "
+"флагом B<EPOLLET> (edge-triggered), то вызов B<epoll_wait>(2) на шаге 5, "
+"вероятно, повиснет, несмотря на имеющие данные в буфере ввода; в это же "
+"время удалённая сторона может ожидать подтверждения приёма уже отправленных "
+"данных. Причиной этого является то, что в режиме edge-triggered события "
+"доставляются только когда происходит изменение состояния отслеживаемого "
+"файлового дескриптора. Поэтому в шаге B<5> вызывающий может бесконечно ждать "
+"появления данных, хотя они уже есть в буфере ввода. В приведённом выше "
+"примере событие для I<rfd> будет сгенерировано из-за операции записи, "
+"сделанной в шаге B<2>, и это событие будет обработано в шаге B<3>. Так как "
+"операция в шаге B<4>, не прочитала все данные из буфера, вызов "
+"B<epoll_wait>(2) в шаге B<5> может заблокироваться навсегда."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"An application that employs the B<EPOLLET> flag should use nonblocking file "
+"descriptors to avoid having a blocking read or write starve a task that is "
+"handling multiple file descriptors. The suggested way to use B<epoll> as an "
+"edge-triggered (B<EPOLLET>) interface is as follows:"
+msgstr ""
+"Приложение, которое применяет флаг B<EPOLLET>, должно использовать "
+"неблокирующие файловые дескрипторы, чтобы избежать приостановки задания, "
+"обрабатывающего множество файловых дескрипторов, из-за блокировок чтения или "
+"записи. Предлагаемый способ использования B<epoll> с интерфейсом Edge "
+"Triggered (B<EPOLLET>):"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "with nonblocking file descriptors; and"
+msgstr "неблокирующие файловые дескрипторы; и"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"by waiting for an event only after B<read>(2) or B<write>(2) return "
+"B<EAGAIN>."
+msgstr ""
+"ожидание события только после того, как B<read>(2) или B<write>(2) возвратят "
+"B<EAGAIN>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"By contrast, when used as a level-triggered interface (the default, when "
+"B<EPOLLET> is not specified), B<epoll> is simply a faster B<poll>(2), and "
+"can be used wherever the latter is used since it shares the same semantics."
+msgstr ""
+"Напротив, при использовании интерфейса level-triggered (по умолчанию, если "
+"не указан B<EPOLLET>) B<epoll> проще и быстрее B<poll>(2), и может быть "
+"использован везде, где используется последний, так как имеет ту же семантику."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Since even with edge-triggered B<epoll>, multiple events can be generated "
+"upon receipt of multiple chunks of data, the caller has the option to "
+"specify the B<EPOLLONESHOT> flag, to tell B<epoll> to disable the associated "
+"file descriptor after the receipt of an event with B<epoll_wait>(2). When "
+"the B<EPOLLONESHOT> flag is specified, it is the caller's responsibility to "
+"rearm the file descriptor using B<epoll_ctl>(2) with B<EPOLL_CTL_MOD>."
+msgstr ""
+"Так как даже с edge-triggered B<epoll> при получении нескольких порций "
+"данных могут генерироваться множественные события, вызывающий может задать "
+"флаг B<EPOLLONESHOT>, который указывает B<epoll> отключить связанный "
+"файловый дескриптор после приёма события с помощью B<epoll_wait>(2). Если "
+"указан флаг B<EPOLLONESHOT>, то вызывающий должен переустановить файловый "
+"дескриптор с помощью B<epoll_ctl>(2) с флагом B<EPOLL_CTL_MOD>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, fuzzy
+#| msgid ""
+#| "If multiple threads (or processes, if child processes have inherited the "
+#| "B<epoll> file descriptor across B<fork>(2)) are blocked in "
+#| "B<epoll_wait>(2) waiting on the same the same epoll file descriptor and "
+#| "a file descriptor in the interest list that is marked for edge-triggered "
+#| "(B<EPOLLET>) notification becomes ready, just one of the threads (or "
+#| "processes) is awoken from B<epoll_wait>(2). This provides a useful "
+#| "optimization for avoiding \"thundering herd\" wake-ups in some scenarios."
+msgid ""
+"If multiple threads (or processes, if child processes have inherited the "
+"B<epoll> file descriptor across B<fork>(2)) are blocked in "
+"B<epoll_wait>(2) waiting on the same epoll file descriptor and a file "
+"descriptor in the interest list that is marked for edge-triggered "
+"(B<EPOLLET>) notification becomes ready, just one of the threads (or "
+"processes) is awoken from B<epoll_wait>(2). This provides a useful "
+"optimization for avoiding \"thundering herd\" wake-ups in some scenarios."
+msgstr ""
+"Если несколько нитей (или процессов, если дочерние процессы унаследовали "
+"файловый дескриптор B<epoll> при B<fork>(2)) блокируются в ожидании "
+"B<epoll_wait>(2) одного и того же файлового дескриптора и файловый "
+"дескриптор в списке interest, помеченный для уведомления edge-triggered "
+"(B<EPOLLET>), становится готовым, то только одна из нитей (или процессов) "
+"пробуждается из B<epoll_wait>(2). Такая полезная оптимизация в некоторых "
+"случаях помогает избежать «лавины» пробуждений."
+
+#. type: SS
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "Interaction with autosleep"
+msgstr "Взаимодействие с autosleep"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"If the system is in B<autosleep> mode via I</sys/power/autosleep> and an "
+"event happens which wakes the device from sleep, the device driver will keep "
+"the device awake only until that event is queued. To keep the device awake "
+"until the event has been processed, it is necessary to use the "
+"B<epoll_ctl>(2) B<EPOLLWAKEUP> flag."
+msgstr ""
+"Если система в режиме B<autosleep> посредством I</sys/power/autosleep> и "
+"происходит событие, которое пробуждает устройство, то драйвер устройства "
+"держит устройство проснувшимся только, пока событие ставится в очередь. "
+"Чтобы устройство не заснуло пока не обработает событие, необходимо "
+"использовать флаг B<epoll_ctl>(2) B<EPOLLWAKEUP>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"When the B<EPOLLWAKEUP> flag is set in the B<events> field for a I<struct "
+"epoll_event>, the system will be kept awake from the moment the event is "
+"queued, through the B<epoll_wait>(2) call which returns the event until the "
+"subsequent B<epoll_wait>(2) call. If the event should keep the system "
+"awake beyond that time, then a separate I<wake_lock> should be taken before "
+"the second B<epoll_wait>(2) call."
+msgstr ""
+"Флаг B<EPOLLWAKEUP> задаётся в поле B<events> для I<struct epoll_event>; "
+"система будет оставаться разбуженной с момента когда событие поступает в "
+"очередь, пока не закончится работа вызова B<epoll_wait>(2), возвращающий "
+"событие, и до последующего вызова B<epoll_wait>(2). Если событие должно "
+"держать систему разбуженной дольше, то нужно применить отдельный "
+"I<wake_lock> перед вторым вызовом B<epoll_wait>(2)."
+
+#. 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 "Интерфейс /proc"
+
+#. Following was added in Linux 2.6.28, but them removed in Linux 2.6.29
+#. .TP
+#. .IR /proc/sys/fs/epoll/max_user_instances " (since Linux 2.6.28)"
+#. This specifies an upper limit on the number of epoll instances
+#. that can be created per real user ID.
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The following interfaces can be used to limit the amount of kernel memory "
+"consumed by epoll:"
+msgstr ""
+"Для ограничения потребления epoll памяти ядра, можно использовать следующие "
+"интерфейсы:"
+
+#. 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/epoll/max_user_watches> (since Linux 2.6.28)"
+msgstr "I</proc/sys/fs/epoll/max_user_watches> (начиная с Linux 2.6.28)"
+
+#. Linux 2.6.29 (in Linux 2.6.28, the default was 1/32 of lowmem)
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"This specifies a limit on the total number of file descriptors that a user "
+"can register across all epoll instances on the system. The limit is per "
+"real user ID. Each registered file descriptor costs roughly 90 bytes on a "
+"32-bit kernel, and roughly 160 bytes on a 64-bit kernel. Currently, the "
+"default value for I<max_user_watches> is 1/25 (4%) of the available low "
+"memory, divided by the registration cost in bytes."
+msgstr ""
+"Задаёт ограничение на общее количество файловых дескрипторов, которые "
+"пользователь может зарегистрировать во всех экземплярах epoll в системе. "
+"Ограничение привязывается к реальному идентификатору пользователя. Каждый "
+"зарезервированный файловый дескриптор занимает, приблизительно, 90 байт в 32-"
+"битном ядре, и, приблизительно, 160 байт в 64-битном ядре. В настоящее "
+"время, значение по умолчанию для I<max_user_watches> равно 1/25 (4%) "
+"доступной памяти ядра (low memory), поделённое на значение размера "
+"дескриптора в байтах."
+
+#. type: SS
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "Example for suggested usage"
+msgstr "Примеры использования"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"While the usage of B<epoll> when employed as a level-triggered interface "
+"does have the same semantics as B<poll>(2), the edge-triggered usage "
+"requires more clarification to avoid stalls in the application event loop. "
+"In this example, listener is a nonblocking socket on which B<listen>(2) has "
+"been called. The function I<do_use_fd()> uses the new ready file descriptor "
+"until B<EAGAIN> is returned by either B<read>(2) or B<write>(2). An event-"
+"driven state machine application should, after having received B<EAGAIN>, "
+"record its current state so that at the next call to I<do_use_fd()> it will "
+"continue to B<read>(2) or B<write>(2) from where it stopped before."
+msgstr ""
+"При применении B<epoll> с интерфейсом level-triggered он имеет ту же "
+"семантику что и B<poll>(2), а при edge-triggered требует больших проверок "
+"для избежания зависаний приложения в событийном цикле. В этом примере, "
+"слушающим является неблокирующий сокет, для которого был вызван "
+"B<listen>(2). Функция I<do_use_fd>() использует новый готовый файловый "
+"дескриптор до тех пор, пока не возвратится B<EAGAIN> от B<read>(2) или "
+"B<write>(2). Приложение на основе машины состояний должно после получения "
+"B<EAGAIN> записать своё текущее состояние так, чтобы последующий вызов "
+"I<do_use_fd>() продолжил выполнять B<read>(2) или B<write>(2) с места "
+"остановки."
+
+#. type: Plain text
+#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron
+#: opensuse-tumbleweed
+#, fuzzy, no-wrap
+#| msgid ""
+#| " for (n = 0; n E<lt> nfds; ++n) {\n"
+#| " if (events[n].data.fd == listen_sock) {\n"
+#| " conn_sock = accept(listen_sock,\n"
+#| " (struct sockaddr *) &addr, &addrlen);\n"
+#| " if (conn_sock == -1) {\n"
+#| " perror(\"accept\");\n"
+#| " exit(EXIT_FAILURE);\n"
+#| " }\n"
+#| " setnonblocking(conn_sock);\n"
+#| " ev.events = EPOLLIN | EPOLLET;\n"
+#| " ev.data.fd = conn_sock;\n"
+#| " if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,\n"
+#| " &ev) == -1) {\n"
+#| " perror(\"epoll_ctl: conn_sock\");\n"
+#| " exit(EXIT_FAILURE);\n"
+#| " }\n"
+#| " } else {\n"
+#| " do_use_fd(events[n].data.fd);\n"
+#| " }\n"
+#| " }\n"
+#| "}\n"
+msgid ""
+"#define MAX_EVENTS 10\n"
+"struct epoll_event ev, events[MAX_EVENTS];\n"
+"int listen_sock, conn_sock, nfds, epollfd;\n"
+"\\&\n"
+"/* Code to set up listening socket, \\[aq]listen_sock\\[aq],\n"
+" (socket(), bind(), listen()) omitted. */\n"
+"\\&\n"
+"epollfd = epoll_create1(0);\n"
+"if (epollfd == -1) {\n"
+" perror(\"epoll_create1\");\n"
+" exit(EXIT_FAILURE);\n"
+"}\n"
+"\\&\n"
+"ev.events = EPOLLIN;\n"
+"ev.data.fd = listen_sock;\n"
+"if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {\n"
+" perror(\"epoll_ctl: listen_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+"}\n"
+"\\&\n"
+"for (;;) {\n"
+" nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);\n"
+" if (nfds == -1) {\n"
+" perror(\"epoll_wait\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+"\\&\n"
+" for (n = 0; n E<lt> nfds; ++n) {\n"
+" if (events[n].data.fd == listen_sock) {\n"
+" conn_sock = accept(listen_sock,\n"
+" (struct sockaddr *) &addr, &addrlen);\n"
+" if (conn_sock == -1) {\n"
+" perror(\"accept\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" setnonblocking(conn_sock);\n"
+" ev.events = EPOLLIN | EPOLLET;\n"
+" ev.data.fd = conn_sock;\n"
+" if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,\n"
+" &ev) == -1) {\n"
+" perror(\"epoll_ctl: conn_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" } else {\n"
+" do_use_fd(events[n].data.fd);\n"
+" }\n"
+" }\n"
+"}\n"
+msgstr ""
+" for (n = 0; n E<lt> nfds; ++n) {\n"
+" if (events[n].data.fd == listen_sock) {\n"
+" conn_sock = accept(listen_sock,\n"
+" (struct sockaddr *) &addr, &addrlen);\n"
+" if (conn_sock == -1) {\n"
+" perror(\"accept\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" setnonblocking(conn_sock);\n"
+" ev.events = EPOLLIN | EPOLLET;\n"
+" ev.data.fd = conn_sock;\n"
+" if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,\n"
+" &ev) == -1) {\n"
+" perror(\"epoll_ctl: conn_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" } else {\n"
+" do_use_fd(events[n].data.fd);\n"
+" }\n"
+" }\n"
+"}\n"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"When used as an edge-triggered interface, for performance reasons, it is "
+"possible to add the file descriptor inside the B<epoll> interface "
+"(B<EPOLL_CTL_ADD>) once by specifying (B<EPOLLIN>|B<EPOLLOUT>). This "
+"allows you to avoid continuously switching between B<EPOLLIN> and "
+"B<EPOLLOUT> calling B<epoll_ctl>(2) with B<EPOLL_CTL_MOD>."
+msgstr ""
+"При использовании интерфейса edge-triggered для большей производительности "
+"можно однократно добавить файловый дескриптор внутрь интерфейса B<epoll> "
+"(B<EPOLL_CTL_ADD>), указав (B<EPOLLIN>|B<EPOLLOUT>). Это позволит вам "
+"избежать постоянного переключения между B<EPOLLIN> и B<EPOLLOUT>, "
+"вызывающими B<epoll_ctl>(2) c B<EPOLL_CTL_MOD>."
+
+#. type: SS
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "Questions and answers"
+msgstr "Вопросы и ответы"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"What is the key used to distinguish the file descriptors registered in an "
+"interest list?"
+msgstr ""
+"По какому ключу различать зарегистрированные файловые дескрипторы в списке "
+"interest?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The key is the combination of the file descriptor number and the open file "
+"description (also known as an \"open file handle\", the kernel's internal "
+"representation of an open file)."
+msgstr ""
+"Уникальной комбинацией является номер файлового дескриптора и описание "
+"открытого файла (так называемый «описатель открытого файла» — внутреннее "
+"представление открытого файла в ядре)."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"What happens if you register the same file descriptor on an B<epoll> "
+"instance twice?"
+msgstr ""
+"Что случится, если зарегистрировать один файловый дескриптор в экземпляре "
+"B<epoll> дважды?"
+
+#. But a file descriptor duplicated by fork(2) can't be added to the
+#. set, because the [file *, fd] pair is already in the epoll set.
+#. That is a somewhat ugly inconsistency. On the one hand, a child process
+#. cannot add the duplicate file descriptor to the epoll set. (In every
+#. other case that I can think of, file descriptors duplicated by fork have
+#. similar semantics to file descriptors duplicated by dup() and friends.) On
+#. the other hand, the very fact that the child has a duplicate of the
+#. file descriptor means that even if the parent closes its file descriptor,
+#. then epoll_wait() in the parent will continue to receive notifications for
+#. that file descriptor because of the duplicated file descriptor in the child.
+#. See http://thread.gmane.org/gmane.linux.kernel/596462/
+#. "epoll design problems with common fork/exec patterns"
+#. mtk, Feb 2008
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"You will probably get B<EEXIST>. However, it is possible to add a duplicate "
+"(B<dup>(2), B<dup2>(2), B<fcntl>(2) B<F_DUPFD>) file descriptor to the "
+"same B<epoll> instance. This can be a useful technique for filtering "
+"events, if the duplicate file descriptors are registered with different "
+"I<events> masks."
+msgstr ""
+"Вероятно, вы получите B<EEXIST>. Однако возможно добавить дубликат файлового "
+"дескриптора (B<dup>(2), B<dup2>(2), B<fcntl>(2) B<F_DUPFD>) в тот же "
+"экземпляр B<epoll>. Это может быть полезно для фильтрующих событий, если "
+"дубликаты файловых дескрипторов регистрируются с разными масками I<events>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Can two B<epoll> instances wait for the same file descriptor? If so, are "
+"events reported to both B<epoll> file descriptors?"
+msgstr ""
+"Могут ли два экземпляра B<epoll> ожидать один файловый дескриптор? Если да, "
+"то сообщаются ли события в оба файловых дескриптора B<epoll>?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Yes, and events would be reported to both. However, careful programming may "
+"be needed to do this correctly."
+msgstr ""
+"Да, и события будут доходить в оба. Однако, чтобы сделать это правильно, "
+"нужна внимательность к деталям."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "Is the B<epoll> file descriptor itself poll/epoll/selectable?"
+msgstr ""
+"Могут ли операции poll/epoll/select применяться к самому файловому "
+"дескриптору B<epoll>?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Yes. If an B<epoll> file descriptor has events waiting, then it will "
+"indicate as being readable."
+msgstr ""
+"Да. Если файловый дескриптор B<epoll> имеет ожидающие события, то он будет "
+"помечен как доступный для чтения."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"What happens if one attempts to put an B<epoll> file descriptor into its own "
+"file descriptor set?"
+msgstr ""
+"Что случится, если попытаться поместить файловый дескриптор B<epoll> в свой "
+"собственный набор файловых дескрипторов?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The B<epoll_ctl>(2) call fails (B<EINVAL>). However, you can add an "
+"B<epoll> file descriptor inside another B<epoll> file descriptor set."
+msgstr ""
+"Вызов B<epoll_ctl>(2) завершается ошибкой (B<EINVAL>). Однако вы можете "
+"добавить файловый дескриптор B<epoll> внутрь другого набора файлового "
+"дескриптора B<epoll>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Can I send an B<epoll> file descriptor over a UNIX domain socket to another "
+"process?"
+msgstr ""
+"Можно ли отправить файловый дескриптор B<epoll> через доменный сокет UNIX "
+"другому процессу?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Yes, but it does not make sense to do this, since the receiving process "
+"would not have copies of the file descriptors in the interest list."
+msgstr ""
+"Да, но это не имеет смысла, так как принимающий процесс не имеет копий "
+"файловых дескрипторов в списке interest."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Will closing a file descriptor cause it to be removed from all B<epoll> "
+"interest lists?"
+msgstr ""
+"Приводит ли закрытие файлового дескриптора к его удалению из всех списков "
+"interest B<epoll>?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Yes, but be aware of the following point. A file descriptor is a reference "
+"to an open file description (see B<open>(2)). Whenever a file descriptor is "
+"duplicated via B<dup>(2), B<dup2>(2), B<fcntl>(2) B<F_DUPFD>, or "
+"B<fork>(2), a new file descriptor referring to the same open file "
+"description is created. An open file description continues to exist until "
+"all file descriptors referring to it have been closed."
+msgstr ""
+"Да, но учтите следующий момент. Файловый дескриптор является ссылкой на "
+"открытое файловое описание (смотрите B<open>(2)). При создании дубля "
+"файлового дескриптора с помощью B<dup>(2), B<dup2>(2), B<fcntl>(2) "
+"B<F_DUPFD> или B<fork>(2) созданный новый файловый дескриптор указывает на "
+"то же открытое файловое описание. Открытое файловое описание продолжает "
+"существовать до тех пор, пока все указывающие на него файловые дескрипторы "
+"не будут закрыты."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"A file descriptor is removed from an interest list only after all the file "
+"descriptors referring to the underlying open file description have been "
+"closed. This means that even after a file descriptor that is part of an "
+"interest list has been closed, events may be reported for that file "
+"descriptor if other file descriptors referring to the same underlying file "
+"description remain open. To prevent this happening, the file descriptor "
+"must be explicitly removed from the interest list (using B<epoll_ctl>(2) "
+"B<EPOLL_CTL_DEL>) before it is duplicated. Alternatively, the application "
+"must ensure that all file descriptors are closed (which may be difficult if "
+"file descriptors were duplicated behind the scenes by library functions that "
+"used B<dup>(2) or B<fork>(2))."
+msgstr ""
+"Файловый дескриптор удаляется из списка interest только после того, как "
+"будут закрыты все файловые дескрипторы, ссылающиеся на открытое файловое "
+"описание. Это означает, что даже после закрытия файлового дескриптора, "
+"являющегося частью списка interest, могут поступать события от файлового "
+"дескриптора, если остались открытыми другие файловые дескрипторы, "
+"ссылающиеся на тоже файловое описание. Чтобы такого не случалось, файловый "
+"дескриптор должен быть удалён из списка interest явным образом (с помощью "
+"B<epoll_ctl>(2) B<EPOLL_CTL_DEL>) до создания его дубликата. Или же "
+"приложение может проверить,что закрыты все файловые дескрипторы (что может "
+"быть трудно, если дубли файлового дескриптора неявно создавались где-то в "
+"библиотечных функциях с помощью B<dup>(2) или B<fork>(2))."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"If more than one event occurs between B<epoll_wait>(2) calls, are they "
+"combined or reported separately?"
+msgstr ""
+"Если между вызовами B<epoll_wait>(2) придёт более одного события, то они "
+"будут объединены или о них будет сообщено по отдельности?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "They will be combined."
+msgstr "Они будут объединены."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Does an operation on a file descriptor affect the already collected but not "
+"yet reported events?"
+msgstr ""
+"Влияет ли операция над файловым дескриптором на уже собранные, но пока ещё "
+"не сообщенные события?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"You can do two operations on an existing file descriptor. Remove would be "
+"meaningless for this case. Modify will reread available I/O."
+msgstr ""
+"Вы можете выполнить две операции на существующем файловом дескрипторе. "
+"Удаление в этом случае бессмысленно. Изменение приведёт к повторному чтению "
+"доступного ввода/вывода."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Do I need to continuously read/write a file descriptor until B<EAGAIN> when "
+"using the B<EPOLLET> flag (edge-triggered behavior)?"
+msgstr ""
+"Должен ли я читать/записывать файловый дескриптор до пор пока, не получу "
+"B<EAGAIN> при использовании флага B<EPOLLET> (поведение edge-triggered)?"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Receiving an event from B<epoll_wait>(2) should suggest to you that such "
+"file descriptor is ready for the requested I/O operation. You must consider "
+"it ready until the next (nonblocking) read/write yields B<EAGAIN>. When "
+"and how you will use the file descriptor is entirely up to you."
+msgstr ""
+"Получение события от B<epoll_wait>(2) должно сообщить вам, что файловый "
+"дескриптор готов для запрошенной операции ввода/вывода. Вы должны "
+"предполагать, что он готов до тех пор, пока вы не получите следующий "
+"B<EAGAIN> от (неблокирующего) чтения/записи. Когда и как вы будете "
+"использовать файловый дескриптор — полностью зависит от вас."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"For packet/token-oriented files (e.g., datagram socket, terminal in "
+"canonical mode), the only way to detect the end of the read/write I/O space "
+"is to continue to read/write until B<EAGAIN>."
+msgstr ""
+"Для пакетных/метко ориентированных файлов (например, датаграмных сокетов, "
+"терминал в каноническом режиме) единственным способом обнаружить конец "
+"чтения/записи пространства ввода-вывода — это продолжать чтение/записи до "
+"получения B<EAGAIN>."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"For stream-oriented files (e.g., pipe, FIFO, stream socket), the condition "
+"that the read/write I/O space is exhausted can also be detected by checking "
+"the amount of data read from / written to the target file descriptor. For "
+"example, if you call B<read>(2) by asking to read a certain amount of data "
+"and B<read>(2) returns a lower number of bytes, you can be sure of having "
+"exhausted the read I/O space for the file descriptor. The same is true when "
+"writing using B<write>(2). (Avoid this latter technique if you cannot "
+"guarantee that the monitored file descriptor always refers to a stream-"
+"oriented file.)"
+msgstr ""
+"Для потокоориентированных файлов (например, каналы, FIFO, потоковые сокеты) "
+"условие, при которых чтение/запись пространства ввода/вывода закончилось, "
+"может быть определено проверкой количества считанных/записанных данных из/в "
+"целевого файлового дескриптора. Например, если вы вызвали B<read>(2) для "
+"чтения определённого количества данных и B<read>(2) вернул меньшее "
+"количество байтов, то можно быть уверенным, что пространство чтения ввода/"
+"вывода этого файлового дескриптора закончилось. То же самое справедливо для "
+"записи посредством B<write>(2) (не используйте последнее, если вы не можете "
+"гарантировать, что отслеживаемый файловый дескриптор всегда ссылается на "
+"потокоориентированный файл)."
+
+#. type: SS
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "Possible pitfalls and ways to avoid them"
+msgstr "Возможные ловушки и способы их обхода"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, fuzzy
+#| msgid "B<o Starvation (edge-triggered)>"
+msgid "B<Starvation (edge-triggered)>"
+msgstr "B<o Информационный голод (edge-triggered)>"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"If there is a large amount of I/O space, it is possible that by trying to "
+"drain it the other files will not get processed causing starvation. (This "
+"problem is not specific to B<epoll>.)"
+msgstr ""
+"Если существует большое пространство ввода/вывода, то возможно, что пока вы "
+"его читаете, другие файлы не будут обрабатываться и возникнет недостаток "
+"данных (этого, обычно, не происходит с B<epoll>)."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The solution is to maintain a ready list and mark the file descriptor as "
+"ready in its associated data structure, thereby allowing the application to "
+"remember which files need to be processed but still round robin amongst all "
+"the ready files. This also supports ignoring subsequent events you receive "
+"for file descriptors that are already ready."
+msgstr ""
+"Решением будет поддержка списка готовности и маркировка файлового "
+"дескриптора как готового в связанной с ним структуре данных, тем самым "
+"позволяя приложению запоминать какие файлы требуют обработки, но всё ещё не "
+"обработанных среди уже готовых файлов. Это также поддерживает игнорирование "
+"последующих событий готовности файловых дескрипторов, получаемых вами."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, fuzzy
+#| msgid "B<o If using an event cache...>"
+msgid "B<If using an event cache...>"
+msgstr "B<o Если использовать кэш событий…>"
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"If you use an event cache or store all the file descriptors returned from "
+"B<epoll_wait>(2), then make sure to provide a way to mark its closure "
+"dynamically (i.e., caused by a previous event's processing). Suppose you "
+"receive 100 events from B<epoll_wait>(2), and in event #47 a condition "
+"causes event #13 to be closed. If you remove the structure and B<close>(2) "
+"the file descriptor for event #13, then your event cache might still say "
+"there are events waiting for that file descriptor causing confusion."
+msgstr ""
+"Если вы используете кэш событий или храните все файловые дескрипторы, "
+"возвращённые от B<epoll_wait>(2), то убедитесь, что вы обеспечили способ его "
+"динамического закрытия (например, вызванное обработкой предыдущего события). "
+"Предположим, что вы получили 100 событий от B<epoll_wait>(2), и что в "
+"событии №47 некоторое условие определяет, что событие №13 должно быть "
+"закрыто. Если вы удалите структуру и выполните B<close>(2) файлового "
+"дескриптора для события №13, то кэш событий всё ещё может сообщать о том, "
+"что есть ожидаемые события для этого файлового дескриптора, что приводит к "
+"путнице."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"One solution for this is to call, during the processing of event 47, "
+"B<epoll_ctl>(B<EPOLL_CTL_DEL>) to delete file descriptor 13 and "
+"B<close>(2), then mark its associated data structure as removed and link it "
+"to a cleanup list. If you find another event for file descriptor 13 in your "
+"batch processing, you will discover the file descriptor had been previously "
+"removed and there will be no confusion."
+msgstr ""
+"Одним из решений будет вызов, во время обработки события №47, "
+"B<epoll_ctl>(B<EPOLL_CTL_DEL>) для удаления файлового дескриптора 13 и вызов "
+"B<close>(2), а затем маркировка связанной с ним структуры данных как "
+"удалённой и связки его со списком очистки. Если при пакетной обработке "
+"найдется другое событие для файлового дескриптора 13, то обнаружится, что "
+"файловый дескриптор уже был удалён и конфликтов не будет."
+
+#. type: SH
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "VERSIONS"
+msgstr "ВЕРСИИ"
+
+#. type: Plain text
+#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron
+#: opensuse-leap-15-6 opensuse-tumbleweed
+#, fuzzy
+#| msgid ""
+#| "The B<epoll> API is Linux-specific. Some other systems provide similar "
+#| "mechanisms, for example, FreeBSD has I<kqueue>, and Solaris has I</dev/"
+#| "poll>."
+msgid ""
+"Some other systems provide similar mechanisms; for example, FreeBSD has "
+"I<kqueue>, and Solaris has I</dev/poll>."
+msgstr ""
+"Программный интерфейс B<epoll> есть только в Linux. В некоторых других "
+"системах есть подобные механизмы, например, в FreeBSD есть I<kqueue>, а в "
+"Solaris — I</dev/poll>."
+
+#. 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 "Linux."
+
+#. type: SH
+#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron
+#: opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "HISTORY"
+msgstr "ИСТОРИЯ"
+
+#. Its interface should be finalized in Linux 2.5.66.
+#. type: Plain text
+#: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron
+#: opensuse-leap-15-6 opensuse-tumbleweed
+msgid "Linux 2.5.44. glibc 2.3.2."
+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
+#, fuzzy
+#| msgid ""
+#| "The set of file descriptors that is being monitored via an epoll file "
+#| "descriptor can be viewed via the entry for the epoll file descriptor in "
+#| "the process's I</proc/[pid]/fdinfo> directory. See B<proc>(5) for "
+#| "further details."
+msgid ""
+"The set of file descriptors that is being monitored via an epoll file "
+"descriptor can be viewed via the entry for the epoll file descriptor in the "
+"process's I</proc/>pidI</fdinfo> directory. See B<proc>(5) for further "
+"details."
+msgstr ""
+"Набор файловых дескрипторов, которые отслеживаются через файловый дескриптор "
+"epoll, можно найти в записи для файлового дескриптора epoll в каталоге "
+"процесса I</proc/[pid]/fdinfo>. Подробности смотрите в B<proc>(5)."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The B<kcmp>(2) B<KCMP_EPOLL_TFD> operation can be used to test whether a "
+"file descriptor is present in an epoll instance."
+msgstr ""
+"Вызов The B<kcmp>(2) с операцией B<KCMP_EPOLL_TFD> можно использовать для "
+"проверки, что файловый дескриптор присутствует в экземпляре epoll."
+
+#. 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<epoll_create>(2), B<epoll_create1>(2), B<epoll_ctl>(2), B<epoll_wait>(2), "
+"B<poll>(2), B<select>(2)"
+msgstr ""
+"B<epoll_create>(2), B<epoll_create1>(2), B<epoll_ctl>(2), B<epoll_wait>(2), "
+"B<poll>(2), B<select>(2)"
+
+#. type: TH
+#: debian-bookworm
+#, no-wrap
+msgid "2023-02-05"
+msgstr "5 февраля 2023 г."
+
+#. type: TH
+#: debian-bookworm
+#, no-wrap
+msgid "Linux man-pages 6.03"
+msgstr "Linux man-pages 6.03"
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, no-wrap
+msgid ""
+"#define MAX_EVENTS 10\n"
+"struct epoll_event ev, events[MAX_EVENTS];\n"
+"int listen_sock, conn_sock, nfds, epollfd;\n"
+msgstr ""
+"#define MAX_EVENTS 10\n"
+"struct epoll_event ev, events[MAX_EVENTS];\n"
+"int listen_sock, conn_sock, nfds, epollfd;\n"
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, fuzzy, no-wrap
+#| msgid ""
+#| "/* Code to set up listening socket, \\(aqlisten_sock\\(aq,\n"
+#| " (socket(), bind(), listen()) omitted */\n"
+msgid ""
+"/* Code to set up listening socket, \\[aq]listen_sock\\[aq],\n"
+" (socket(), bind(), listen()) omitted. */\n"
+msgstr ""
+"/* Код для настройки слушающего сокета, \\(aqlisten_sock\\(aq,\n"
+" (socket(), bind(), listen()) не показаны */\n"
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, no-wrap
+msgid ""
+"epollfd = epoll_create1(0);\n"
+"if (epollfd == -1) {\n"
+" perror(\"epoll_create1\");\n"
+" exit(EXIT_FAILURE);\n"
+"}\n"
+msgstr ""
+"epollfd = epoll_create1(0);\n"
+"if (epollfd == -1) {\n"
+" perror(\"epoll_create1\");\n"
+" exit(EXIT_FAILURE);\n"
+"}\n"
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, no-wrap
+msgid ""
+"ev.events = EPOLLIN;\n"
+"ev.data.fd = listen_sock;\n"
+"if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {\n"
+" perror(\"epoll_ctl: listen_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+"}\n"
+msgstr ""
+"ev.events = EPOLLIN;\n"
+"ev.data.fd = listen_sock;\n"
+"if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {\n"
+" perror(\"epoll_ctl: listen_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+"}\n"
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, no-wrap
+msgid ""
+"for (;;) {\n"
+" nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);\n"
+" if (nfds == -1) {\n"
+" perror(\"epoll_wait\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+msgstr ""
+"for (;;) {\n"
+" nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);\n"
+" if (nfds == -1) {\n"
+" perror(\"epoll_wait\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, no-wrap
+msgid ""
+" for (n = 0; n E<lt> nfds; ++n) {\n"
+" if (events[n].data.fd == listen_sock) {\n"
+" conn_sock = accept(listen_sock,\n"
+" (struct sockaddr *) &addr, &addrlen);\n"
+" if (conn_sock == -1) {\n"
+" perror(\"accept\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" setnonblocking(conn_sock);\n"
+" ev.events = EPOLLIN | EPOLLET;\n"
+" ev.data.fd = conn_sock;\n"
+" if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,\n"
+" &ev) == -1) {\n"
+" perror(\"epoll_ctl: conn_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" } else {\n"
+" do_use_fd(events[n].data.fd);\n"
+" }\n"
+" }\n"
+"}\n"
+msgstr ""
+" for (n = 0; n E<lt> nfds; ++n) {\n"
+" if (events[n].data.fd == listen_sock) {\n"
+" conn_sock = accept(listen_sock,\n"
+" (struct sockaddr *) &addr, &addrlen);\n"
+" if (conn_sock == -1) {\n"
+" perror(\"accept\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" setnonblocking(conn_sock);\n"
+" ev.events = EPOLLIN | EPOLLET;\n"
+" ev.data.fd = conn_sock;\n"
+" if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,\n"
+" &ev) == -1) {\n"
+" perror(\"epoll_ctl: conn_sock\");\n"
+" exit(EXIT_FAILURE);\n"
+" }\n"
+" } else {\n"
+" do_use_fd(events[n].data.fd);\n"
+" }\n"
+" }\n"
+"}\n"
+
+#. Its interface should be finalized in Linux kernel 2.5.66.
+#. type: Plain text
+#: debian-bookworm
+#, fuzzy
+#| msgid ""
+#| "The B<epoll> API was introduced in Linux kernel 2.5.44. Support was "
+#| "added to glibc in version 2.3.2."
+msgid ""
+"The B<epoll> API was introduced in Linux kernel 2.5.44. Support was added "
+"in glibc 2.3.2."
+msgstr ""
+"Программный интерфейс B<epoll> был добавлен в ядро Linux версии 2.5.44. "
+"Поддержка в glibc доступна с версии 2.3.2."
+
+#. type: Plain text
+#: debian-bookworm
+msgid ""
+"The B<epoll> API is Linux-specific. Some other systems provide similar "
+"mechanisms, for example, FreeBSD has I<kqueue>, and Solaris has I</dev/poll>."
+msgstr ""
+"Программный интерфейс B<epoll> есть только в Linux. В некоторых других "
+"системах есть подобные механизмы, например, в FreeBSD есть I<kqueue>, а в "
+"Solaris — I</dev/poll>."
+
+#. type: TH
+#: debian-unstable opensuse-tumbleweed
+#, no-wrap
+msgid "2023-05-03"
+msgstr "3 мая 2023 г."
+
+#. type: TH
+#: debian-unstable opensuse-tumbleweed
+#, no-wrap
+msgid "Linux man-pages 6.05.01"
+msgstr "Linux man-pages 6.05.01"
+
+#. type: TH
+#: opensuse-leap-15-6
+#, no-wrap
+msgid "2023-03-30"
+msgstr "30 марта 2023 г."
+
+#. type: TH
+#: opensuse-leap-15-6
+#, no-wrap
+msgid "Linux man-pages 6.04"
+msgstr "Linux man-pages 6.04"