# Russian translation of manpages # This file is distributed under the same license as the manpages-l10n package. # Copyright © of this file: # Azamat Hackimov , 2012. # Yuri Kozlov , 2011-2019. # Иван Павлов , 2017. msgid "" msgstr "" "Project-Id-Version: manpages-l10n\n" "POT-Creation-Date: 2024-06-01 05:48+0200\n" "PO-Revision-Date: 2019-10-05 07:57+0300\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \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 debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "2 мая 2024 г." #. type: TH #: archlinux debian-unstable #, fuzzy, no-wrap #| msgid "Linux man-pages 6.7" msgid "Linux man-pages 6.8" msgstr "Linux man-pages 6.7" #. 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 Esys/epoll.hE>\n" msgstr "B<#include Esys/epoll.hE>\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 API performs a similar task to B(2): monitoring multiple " "file descriptors to see if I/O is possible on any of them. The B 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 выполняется схожую с B(2) задачу: " "следит за несколькими файловыми дескрипторами и ждёт, когда станет возможен " "ввод-вывод для одного из них. Программный интерфейс B можно " "использовать либо в режиме 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 API is the B I, an in-" "kernel data structure which, from a user-space perspective, can be " "considered as a container for two lists:" msgstr "" "Центральным элементом программного интерфейса B является I<экземпляр> " "B — структура данных ядра, которая с точки зрения пользовательского " "пространства может рассматриваться как контейнер с двумя списками:" #. 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 list (sometimes also called the B set): the set of " "file descriptors that the process has registered an interest in monitoring." msgstr "" "Список I (иногда также называемый набором B): набор " "файловых дескрипторов, которые зарегистрировал процесс для слежения." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, fuzzy #| msgid "" #| "The I 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 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 — это часть набора (точнее, " "набор ссылок) файловых дескрипторов из списка 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 " "instance:" msgstr "" "Для создания и управления экземпляром B служат следующие системные " "вызовы:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(2) creates a new B instance and returns a file " "descriptor referring to that instance. (The more recent " "B(2) extends the functionality of B(2).)" msgstr "" "Вызов B(2) создаёт экземпляр новый B и возвращает " "файловый дескриптор, указывающий на этот экземпляр (более новый " "B(2) расширяет возможности B(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(2), which adds items to the interest list of the B " "instance." msgstr "" "Затем с помощью B(2) регистрируются интересующие файловые " "дескрипторы, который добавляет их в список interest экземпляра I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(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 instance.)" msgstr "" "Вызов B(2) ждёт наступления событий ввода-вывода, блокируя " "вызывающую нить, если события пока недоступны (данный системный вызов можно " "рассматривать как выборщике элементов из списка готовности экземпляра " "B)." #. 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 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: 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) is " "registered on the B instance." msgstr "" "Файловый дескриптор, представляющий читающую сторону канала (I), " "регистрируется в экземпляре B." #. 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(2) is done that will return I as a ready file " "descriptor." msgstr "" "Вызов B(2) завершается и возвращает I как готовый файловый " "дескриптор." #. 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." msgstr "Читающая сторона канала считывает 1\\ КБ данных из I." #. 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(2) is done." msgstr "Вызов B(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 file descriptor has been added to the B interface using " "the B (edge-triggered) flag, the call to B(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 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(2) done in step " "B<5> might block indefinitely." msgstr "" "Если файловый дескриптор I добавлен к экземпляру B с указанным " "флагом B (edge-triggered), то вызов B(2) на шаге 5, " "вероятно, повиснет, несмотря на имеющие данные в буфере ввода; в это же " "время удалённая сторона может ожидать подтверждения приёма уже отправленных " "данных. Причиной этого является то, что в режиме edge-triggered события " "доставляются только когда происходит изменение состояния отслеживаемого " "файлового дескриптора. Поэтому в шаге B<5> вызывающий может бесконечно ждать " "появления данных, хотя они уже есть в буфере ввода. В приведённом выше " "примере событие для I будет сгенерировано из-за операции записи, " "сделанной в шаге B<2>, и это событие будет обработано в шаге B<3>. Так как " "операция в шаге B<4>, не прочитала все данные из буфера, вызов " "B(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 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 as an " "edge-triggered (B) interface is as follows:" msgstr "" "Приложение, которое применяет флаг B, должно использовать " "неблокирующие файловые дескрипторы, чтобы избежать приостановки задания, " "обрабатывающего множество файловых дескрипторов, из-за блокировок чтения или " "записи. Предлагаемый способ использования B с интерфейсом Edge " "Triggered (B):" #. 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(2) or B(2) return " "B." msgstr "" "ожидание события только после того, как B(2) или B(2) возвратят " "B." #. 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 is not specified), B is simply a faster B(2), and " "can be used wherever the latter is used since it shares the same semantics." msgstr "" "Напротив, при использовании интерфейса level-triggered (по умолчанию, если " "не указан B) B проще и быстрее B(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, multiple events can be generated " "upon receipt of multiple chunks of data, the caller has the option to " "specify the B flag, to tell B to disable the associated " "file descriptor after the receipt of an event with B(2). When " "the B flag is specified, it is the caller's responsibility to " "rearm the file descriptor using B(2) with B." msgstr "" "Так как даже с edge-triggered B при получении нескольких порций " "данных могут генерироваться множественные события, вызывающий может задать " "флаг B, который указывает B отключить связанный " "файловый дескриптор после приёма события с помощью B(2). Если " "указан флаг B, то вызывающий должен переустановить файловый " "дескриптор с помощью B(2) с флагом B." #. 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 file descriptor across B(2)) are blocked in " #| "B(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) notification becomes ready, just one of the threads (or " #| "processes) is awoken from B(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 file descriptor across B(2)) are blocked in " "B(2) waiting on the same epoll file descriptor and a file " "descriptor in the interest list that is marked for edge-triggered " "(B) notification becomes ready, just one of the threads (or " "processes) is awoken from B(2). This provides a useful " "optimization for avoiding \"thundering herd\" wake-ups in some scenarios." msgstr "" "Если несколько нитей (или процессов, если дочерние процессы унаследовали " "файловый дескриптор B при B(2)) блокируются в ожидании " "B(2) одного и того же файлового дескриптора и файловый " "дескриптор в списке interest, помеченный для уведомления edge-triggered " "(B), становится готовым, то только одна из нитей (или процессов) " "пробуждается из B(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 mode via I 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(2) B flag." msgstr "" "Если система в режиме B посредством I и " "происходит событие, которое пробуждает устройство, то драйвер устройства " "держит устройство проснувшимся только, пока событие ставится в очередь. " "Чтобы устройство не заснуло пока не обработает событие, необходимо " "использовать флаг B(2) B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When the B flag is set in the B field for a I, the system will be kept awake from the moment the event is " "queued, through the B(2) call which returns the event until the " "subsequent B(2) call. If the event should keep the system " "awake beyond that time, then a separate I should be taken before " "the second B(2) call." msgstr "" "Флаг B задаётся в поле B для I; " "система будет оставаться разбуженной с момента когда событие поступает в " "очередь, пока не закончится работа вызова B(2), возвращающий " "событие, и до последующего вызова B(2). Если событие должно " "держать систему разбуженной дольше, то нужно применить отдельный " "I перед вторым вызовом B(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 (since Linux 2.6.28)" msgstr "I (начиная с 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 is 1/25 (4%) of the available low " "memory, divided by the registration cost in bytes." msgstr "" "Задаёт ограничение на общее количество файловых дескрипторов, которые " "пользователь может зарегистрировать во всех экземплярах epoll в системе. " "Ограничение привязывается к реальному идентификатору пользователя. Каждый " "зарезервированный файловый дескриптор занимает, приблизительно, 90 байт в 32-" "битном ядре, и, приблизительно, 160 байт в 64-битном ядре. В настоящее " "время, значение по умолчанию для I равно 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 when employed as a level-triggered interface " "does have the same semantics as B(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(2) has " "been called. The function I uses the new ready file descriptor " "until B is returned by either B(2) or B(2). An event-" "driven state machine application should, after having received B, " "record its current state so that at the next call to I it will " "continue to B(2) or B(2) from where it stopped before." msgstr "" "При применении B с интерфейсом level-triggered он имеет ту же " "семантику что и B(2), а при edge-triggered требует больших проверок " "для избежания зависаний приложения в событийном цикле. В этом примере, " "слушающим является неблокирующий сокет, для которого был вызван " "B(2). Функция I() использует новый готовый файловый " "дескриптор до тех пор, пока не возвратится B от B(2) или " "B(2). Приложение на основе машины состояний должно после получения " "B записать своё текущее состояние так, чтобы последующий вызов " "I() продолжил выполнять B(2) или B(2) с места " "остановки." #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, fuzzy, no-wrap #| msgid "" #| " for (n = 0; n E 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 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 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 interface " "(B) once by specifying (B|B). This " "allows you to avoid continuously switching between B and " "B calling B(2) with B." msgstr "" "При использовании интерфейса edge-triggered для большей производительности " "можно однократно добавить файловый дескриптор внутрь интерфейса B " "(B), указав (B|B). Это позволит вам " "избежать постоянного переключения между B и B, " "вызывающими B(2) c B." #. 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 " "instance twice?" msgstr "" "Что случится, если зарегистрировать один файловый дескриптор в экземпляре " "B дважды?" #. 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. However, it is possible to add a duplicate " "(B(2), B(2), B(2) B) file descriptor to the " "same B instance. This can be a useful technique for filtering " "events, if the duplicate file descriptors are registered with different " "I masks." msgstr "" "Вероятно, вы получите B. Однако возможно добавить дубликат файлового " "дескриптора (B(2), B(2), B(2) B) в тот же " "экземпляр B. Это может быть полезно для фильтрующих событий, если " "дубликаты файловых дескрипторов регистрируются с разными масками I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Can two B instances wait for the same file descriptor? If so, are " "events reported to both B file descriptors?" msgstr "" "Могут ли два экземпляра B ожидать один файловый дескриптор? Если да, " "то сообщаются ли события в оба файловых дескриптора B?" #. 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 file descriptor itself poll/epoll/selectable?" msgstr "" "Могут ли операции poll/epoll/select применяться к самому файловому " "дескриптору B?" #. 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 file descriptor has events waiting, then it will " "indicate as being readable." msgstr "" "Да. Если файловый дескриптор B имеет ожидающие события, то он будет " "помечен как доступный для чтения." #. 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 file descriptor into its own " "file descriptor set?" msgstr "" "Что случится, если попытаться поместить файловый дескриптор B в свой " "собственный набор файловых дескрипторов?" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B(2) call fails (B). However, you can add an " "B file descriptor inside another B file descriptor set." msgstr "" "Вызов B(2) завершается ошибкой (B). Однако вы можете " "добавить файловый дескриптор B внутрь другого набора файлового " "дескриптора B." #. 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 file descriptor over a UNIX domain socket to another " "process?" msgstr "" "Можно ли отправить файловый дескриптор B через доменный сокет 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 " "interest lists?" msgstr "" "Приводит ли закрытие файлового дескриптора к его удалению из всех списков " "interest B?" #. 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(2)). Whenever a file descriptor is " "duplicated via B(2), B(2), B(2) B, or " "B(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(2)). При создании дубля " "файлового дескриптора с помощью B(2), B(2), B(2) " "B или B(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(2) " "B) 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(2) or B(2))." msgstr "" "Файловый дескриптор удаляется из списка interest только после того, как " "будут закрыты все файловые дескрипторы, ссылающиеся на открытое файловое " "описание. Это означает, что даже после закрытия файлового дескриптора, " "являющегося частью списка interest, могут поступать события от файлового " "дескриптора, если остались открытыми другие файловые дескрипторы, " "ссылающиеся на тоже файловое описание. Чтобы такого не случалось, файловый " "дескриптор должен быть удалён из списка interest явным образом (с помощью " "B(2) B) до создания его дубликата. Или же " "приложение может проверить,что закрыты все файловые дескрипторы (что может " "быть трудно, если дубли файлового дескриптора неявно создавались где-то в " "библиотечных функциях с помощью B(2) или B(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(2) calls, are they " "combined or reported separately?" msgstr "" "Если между вызовами B(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 when " "using the B flag (edge-triggered behavior)?" msgstr "" "Должен ли я читать/записывать файловый дескриптор до пор пока, не получу " "B при использовании флага B (поведение 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(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. When " "and how you will use the file descriptor is entirely up to you." msgstr "" "Получение события от B(2) должно сообщить вам, что файловый " "дескриптор готов для запрошенной операции ввода/вывода. Вы должны " "предполагать, что он готов до тех пор, пока вы не получите следующий " "B от (неблокирующего) чтения/записи. Когда и как вы будете " "использовать файловый дескриптор — полностью зависит от вас." #. 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." msgstr "" "Для пакетных/метко ориентированных файлов (например, датаграмных сокетов, " "терминал в каноническом режиме) единственным способом обнаружить конец " "чтения/записи пространства ввода-вывода — это продолжать чтение/записи до " "получения B." #. 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(2) by asking to read a certain amount of data " "and B(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(2). (Avoid this latter technique if you cannot " "guarantee that the monitored file descriptor always refers to a stream-" "oriented file.)" msgstr "" "Для потокоориентированных файлов (например, каналы, FIFO, потоковые сокеты) " "условие, при которых чтение/запись пространства ввода/вывода закончилось, " "может быть определено проверкой количества считанных/записанных данных из/в " "целевого файлового дескриптора. Например, если вы вызвали B(2) для " "чтения определённого количества данных и B(2) вернул меньшее " "количество байтов, то можно быть уверенным, что пространство чтения ввода/" "вывода этого файлового дескриптора закончилось. То же самое справедливо для " "записи посредством B(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" msgid "B" msgstr "B" #. 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.)" msgstr "" "Если существует большое пространство ввода/вывода, то возможно, что пока вы " "его читаете, другие файлы не будут обрабатываться и возникнет недостаток " "данных (этого, обычно, не происходит с B)." #. 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" msgid "B" msgstr "B" #. 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(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(2), and in event #47 a condition " "causes event #13 to be closed. If you remove the structure and B(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(2), то убедитесь, что вы обеспечили способ его " "динамического закрытия (например, вызванное обработкой предыдущего события). " "Предположим, что вы получили 100 событий от B(2), и что в " "событии №47 некоторое условие определяет, что событие №13 должно быть " "закрыто. Если вы удалите структуру и выполните B(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(B) to delete file descriptor 13 and " "B(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(B) для удаления файлового дескриптора 13 и вызов " "B(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 API is Linux-specific. Some other systems provide similar " #| "mechanisms, for example, FreeBSD has I, and Solaris has I." msgid "" "Some other systems provide similar mechanisms; for example, FreeBSD has " "I, and Solaris has I." msgstr "" "Программный интерфейс B есть только в Linux. В некоторых других " "системах есть подобные механизмы, например, в FreeBSD есть I, а в " "Solaris — I." #. 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 directory. See B(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 IpidI directory. See B(5) for further " "details." msgstr "" "Набор файловых дескрипторов, которые отслеживаются через файловый дескриптор " "epoll, можно найти в записи для файлового дескриптора epoll в каталоге " "процесса I. Подробности смотрите в B(5)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B(2) B operation can be used to test whether a " "file descriptor is present in an epoll instance." msgstr "" "Вызов The B(2) с операцией B можно использовать для " "проверки, что файловый дескриптор присутствует в экземпляре 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(2), B(2), B(2), B(2), " "B(2), B(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 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 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 API was introduced in Linux kernel 2.5.44. Support was " #| "added to glibc in version 2.3.2." msgid "" "The B API was introduced in Linux kernel 2.5.44. Support was added " "in glibc 2.3.2." msgstr "" "Программный интерфейс B был добавлен в ядро Linux версии 2.5.44. " "Поддержка в glibc доступна с версии 2.3.2." #. type: Plain text #: debian-bookworm msgid "" "The B API is Linux-specific. Some other systems provide similar " "mechanisms, for example, FreeBSD has I, and Solaris has I." msgstr "" "Программный интерфейс B есть только в Linux. В некоторых других " "системах есть подобные механизмы, например, в FreeBSD есть I, а в " "Solaris — I." #. type: TH #: fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "31 октября 2023 г." #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "Linux man-pages 6.06" #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "Linux man-pages 6.7" #. 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" #. type: TH #: opensuse-tumbleweed #, fuzzy, no-wrap #| msgid "Linux man-pages 6.7" msgid "Linux man-pages (unreleased)" msgstr "Linux man-pages 6.7"