diff options
Diffstat (limited to 'po/ru/man7/epoll.7.po')
-rw-r--r-- | po/ru/man7/epoll.7.po | 1321 |
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" |