> Linux Reviews > man >

epoll_wait


  1. epoll_wait.2.man


1. epoll_wait.2.man

Manpage of EPOLL_WAIT

EPOLL_WAIT

Section: Руководство программиста Linux (2)
Updated: 2009-01-17
Index Return to Main Contents
 

ИМЯ

epoll_wait, epoll_pwait - ждать события ввода/вывода на файловом дескрипторе epoll  

ОБЗОР

#include <sys/epoll.h>

int epoll_wait(int epfd, struct epoll_event *events,
               int maxevents, int timeout);
int epoll_pwait(int epfd, struct epoll_event *events,
               int maxevents, int timeout,
               const sigset_t *sigmask);
 

ОПИСАНИЕ

Системный вызов epoll_wait() ожидает события на экземпляре epoll, на который указывает файловый дескриптор epfd. Область памяти, на которую указывает events, будет содержать события, доступные для вызываемого. Вызов epoll_wait() может вернуть до maxevents событий. Параметр maxevents должен быть больше нуля.

Вызов может ожидать событий timeout миллисекунд. Указание timeout равным -1 заставит epoll_wait() ожидать событий бесконечно, а указание timeout равным нулю заставит epoll_wait() завершать работу немедленно, если нет доступных событий (код возврата в этом случае равен нулю).

Структура struct epoll_event определена так:

typedef union epoll_data {
    void    *ptr;
    int      fd;
    uint32_t u32;
    uint64_t u64;
} epoll_data_t;

struct epoll_event {
    uint32_t     events;    /* События epoll */
    epoll_data_t data;      /* Переменная для данных пользователя */
};

Поле data в каждой возвращаемой структуре будет содержать данные пользователя, установленные с помощью epoll_ctl(2) (EPOLL_CTL_ADD,EPOLL_CTL_MOD), а в поле events будет содержаться битовое поле события.  

epoll_pwait()

Отношения между epoll_wait() и epoll_pwait() аналогичны родству select(2) и pselect(2): как pselect(2), epoll_pwait() позволяет приложению безопасно ждать, пока файловый дескриптор не станет готов или пока не будет получен сигнал.

Вызов epoll_pwait():


    ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);

эквивалентен атомарному выполнению следующих вызовов:

    sigset_t origmask;

    sigprocmask(SIG_SETMASK, &sigmask, &origmask);
    ready = epoll_wait(epfd, &events, maxevents, timeout);
    sigprocmask(SIG_SETMASK, &origmask, NULL);

Аргумент sigmask может быть равен NULL --- в этом случае epoll_pwait() эквивалентен epoll_wait().  

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При нормальном выполнении epoll_wait() возвращает количество файловых дескрипторов, готовых для запросов ввода-вывода, или ноль, если ни один файловый дескриптор не стал готов за отведённые timeout миллисекунд. При возникновении ошибки epoll_wait() возвращает -1 и устанавливает errno в соответствующее значение.  

ОШИБКИ

EBADF
epfd не является правильным файловым дескриптором.
EFAULT
Память, указанная events, недоступна на запись из-за прав доступа.
EINTR
Вызов был прерван обработчиком сигнала до возникновения запрошенных событий или истечения timeout; см. signal(7).
EINVAL
epfd не является файловым дескриптором epoll, или maxevents меньше или равно нулю.
 

ВЕРСИИ

epoll_pwait() был добавлен в ядро Linux 2.6.19.

Поддержка epoll_pwait() в glibc появилась в версии 2.6.  

СООТВЕТСТВИЕ СТАНДАРТАМ

Вызов epoll_wait() есть только в Linux; он появился в ядре 2.5.44.  

СМОТРИТЕ ТАКЖЕ

epoll_create(2), epoll_ctl(2), epoll(7)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
epoll_pwait()
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
ВЕРСИИ
СООТВЕТСТВИЕ СТАНДАРТАМ
СМОТРИТЕ ТАКЖЕ

This document was created by man2html using the manual pages.
Time: 17:41:15 GMT, October 23, 2013

SVENSKA - SVENSKA - ja