.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2003 Davide Libenzi .\" Davide Libenzi .\" and Copyright 2007, 2012, 2014, 2018 Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" 2007-04-30: mtk, Added description of epoll_pwait() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH epoll_wait 2 "2 мая 2024 г." "Справочные страницы Linux 6.9.1" .SH НАИМЕНОВАНИЕ epoll_wait, epoll_pwait, epoll_pwait2 \- ждать события ввода/вывода на файловом дескрипторе epoll .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP .P \fBint epoll_wait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP \fB int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB);\fP \fBint epoll_pwait(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP \fB int \fP\fImaxevents\fP\fB, int \fP\fItimeout\fP\fB,\fP \fB const sigset_t *_Nullable \fP\fIsigmask\fP\fB);\fP \fBint epoll_pwait2(int \fP\fIepfd\fP\fB, struct epoll_event *\fP\fIevents\fP\fB,\fP \fB int \fP\fImaxevents\fP\fB, const struct timespec *_Nullable \fP\fItimeout\fP\fB,\fP \fB const sigset_t *_Nullable \fP\fIsigmask\fP\fB);\fP .fi .SH ОПИСАНИЕ The \fBepoll_wait\fP() system call waits for events on the \fBepoll\fP(7) instance referred to by the file descriptor \fIepfd\fP. The buffer pointed to by \fIevents\fP is used to return information from the ready list about file descriptors in the interest list that have some events available. Up to \fImaxevents\fP are returned by \fBepoll_wait\fP(). The \fImaxevents\fP argument must be greater than zero. .P В аргументе \fItimeout\fP указывается количество миллисекунд, на которые будет заблокирован \fBepoll_wait\fP(). Время отслеживается по часам \fBCLOCK_MONOTONIC\fP. .P Вызов \fBepoll_wait\fP() будет заблокирован до тех пор, пока: .IP \[bu] 3 событие не будет доставлено в файловый дескриптор; .IP \[bu] вызов не прервётся обработчиком сигнала; .IP \[bu] не истечёт время ожидания. .P Note that the \fItimeout\fP interval will be rounded up to the system clock granularity, and kernel scheduling delays mean that the blocking interval may overrun by a small amount. Specifying a \fItimeout\fP of \-1 causes \fBepoll_wait\fP() to block indefinitely, while specifying a \fItimeout\fP equal to zero causes \fBepoll_wait\fP() to return immediately, even if no events are available. .P \fIstruct epoll_event\fP описан в \fBepoll_event\fP(3type). .P The \fIdata\fP field of each returned \fIepoll_event\fP structure contains the same data as was specified in the most recent call to \fBepoll_ctl\fP(2) (\fBEPOLL_CTL_ADD\fP, \fBEPOLL_CTL_MOD\fP) for the corresponding open file descriptor. .P .\" The \fIevents\fP field is a bit mask that indicates the events that have occurred for the corresponding open file description. See \fBepoll_ctl\fP(2) for a list of the bits that may appear in this mask. .SS epoll_pwait() Отношения между \fBepoll_wait\fP() и \fBepoll_pwait\fP() аналогичны родству \fBselect\fP(2) и \fBpselect\fP(2): как \fBpselect\fP(2), \fBepoll_pwait\fP() позволяет приложению безопасно ждать, пока файловый дескриптор не станет готов или пока не будет получен сигнал. .P Вызов \fBepoll_pwait\fP(): .P .in +4n .EX ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask); .EE .in .P эквивалентен \fIатомарному\fP выполнению следующих вызовов: .P .in +4n .EX sigset_t origmask; \& pthread_sigmask(SIG_SETMASK, &sigmask, &origmask); ready = epoll_wait(epfd, &events, maxevents, timeout); pthread_sigmask(SIG_SETMASK, &origmask, NULL); .EE .in .P .\" Аргумент \fIsigmask\fP может быть равен NULL \(em в этом случае \fBepoll_pwait\fP() эквивалентен \fBepoll_wait\fP(). .SS epoll_pwait2() The \fBepoll_pwait2\fP() system call is equivalent to \fBepoll_pwait\fP() except for the \fItimeout\fP argument. It takes an argument of type \fItimespec\fP to be able to specify nanosecond resolution timeout. This argument functions the same as in \fBpselect\fP(2) and \fBppoll\fP(2). If \fItimeout\fP is NULL, then \fBepoll_pwait2\fP() can block indefinitely. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBepoll_wait\fP() returns the number of file descriptors ready for the requested I/O operation, or zero if no file descriptor became ready during the requested \fItimeout\fP milliseconds. On failure, \fBepoll_wait\fP() returns \-1 and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEBADF\fP Значение \fIepfd\fP не является правильным файловым дескриптором. .TP \fBEFAULT\fP Память, указанная \fIevents\fP, недоступна на запись из\-за прав доступа. .TP \fBEINTR\fP Вызов был прерван обработчиком сигнала до возникновения любого из запрошенных событий или истечения \fItimeout\fP; см. \fBsignal\fP(7). .TP \fBEINVAL\fP \fIepfd\fP не является файловым дескриптором \fBepoll\fP, или \fImaxevents\fP меньше или равно нулю. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ .TP \fBepoll_wait\fP() .\" To be precise: Linux 2.5.44. .\" The interface should be finalized by Linux 2.5.66. Linux 2.6, glibc 2.3.2. .TP \fBepoll_pwait\fP() Linux 2.6.19, glibc 2.6. .TP \fBepoll_pwait2\fP() Linux 5.11. .SH ПРИМЕЧАНИЯ Пока одна нить блокирована в вызове \fBepoll_wait\fP(), в другой нити возможно добавить файловый дескриптор, который будет ожидаться экземпляром \fBepoll\fP. Как только новый файловый дескриптор станет готовым, это разблокирует вызов \fBepoll_wait\fP(). .P Если готово более \fImaxevents\fP файловых дескрипторов при вызове \fBepoll_wait\fP(), то последующие вызовы \fBepoll_wait\fP() циклически обработают весь набор готовых файловых дескрипторов. Такое поведение помогает избежать голодания — когда процесс не уведомляется, что дополнительные файловые дескрипторы готовы, так как он нацелен на набор файловых дескрипторов, про которые уже известно об их готовности. .P Заметим, что возможно вызвать \fBepoll_wait\fP() для экземпляра \fBepoll\fP, чей список interest ещё пуст (или чей список interest станет пустым, так как файловые дескрипторы закрыты или удалены из interest в другой нити). Вызов будет заблокирован до тех пор, пока какой\-нибудь файловый дескриптор не будет добавлен в список interest (в другой нити) и этот файлоый дескриптор не станет готовым. .SS "Отличия между библиотекой C и ядром" The raw \fBepoll_pwait\fP() and \fBepoll_pwait2\fP() system calls have a sixth argument, \fIsize_t sigsetsize\fP, which specifies the size in bytes of the \fIsigmask\fP argument. The glibc \fBepoll_pwait\fP() wrapper function specifies this argument as a fixed value (equal to \fIsizeof(sigset_t)\fP). .SH ОШИБКИ Before Linux 2.6.37, a \fItimeout\fP value larger than approximately \fILONG_MAX / HZ\fP milliseconds is treated as \-1 (i.e., infinity). Thus, for example, on a system where \fIsizeof(long)\fP is 4 and the kernel \fIHZ\fP value is 1000, this means that timeouts greater than 35.79 minutes are treated as infinity. .SH "СМОТРИТЕ ТАКЖЕ" \fBepoll_create\fP(2), \fBepoll_ctl\fP(2), \fBepoll\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Yuri Kozlov , Иван Павлов и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .