> Linux Reviews > man >

epoll_ctl


  1. epoll_ctl.2.man


1. epoll_ctl.2.man

Manpage of EPOLL_CTL

EPOLL_CTL

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

ИМЯ

epoll_ctl - интерфейс управления дескриптором epoll  

ОБЗОР

#include <sys/epoll.h>

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);  

ОПИСАНИЕ

Данный системный вызов выполняет операции управления интерфейсом epoll, на который указывает файловый дескриптор epfd. Он запрашивает выполнение операции op для файлового дескриптора назначения fd.

Допустимые значения аргумента op:

EPOLL_CTL_ADD
Зарегистрировать файловый дескриптор назначения fd в экземпляре epoll, на который указывает файловый дескриптор epfd, и связать событие event с внутренним файлом, указывающим на fd.
EPOLL_CTL_MOD
Изменить событие event, связанное с файловым дескриптором назначения fd.
EPOLL_CTL_DEL
Удалить (отменить регистрацию) файлового дескриптора назначения fd из экземпляра epoll, на который указывает epfd. Значение event игнорируется и может быть NULL (но см. ДЕФЕКТЫ далее).

Аргумент event описывает объект, связанный с файловым дескриптором fd. Структура 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;        /* Переменная для данных пользователя */
};

Поле events является набором битов, составляемое из следующих возможных типов событий:

EPOLLIN
Связанный файл доступен для чтения с помощью read(2).
EPOLLOUT
Связанный файл доступен для записи с помощью write(2).
EPOLLRDHUP (начиная с Linux 2.6.17)
Одна из сторон потокового сокета закрыла соединение, или выключила записывающую часть соединения. (Этот флаг особенно полезен при написании простого кода для обнаружения отключения стороны с помощью слежения Edge Triggered.)
EPOLLPRI
Для операций read(2) есть срочные данные.
EPOLLERR
Произошла ошибка со связанным файловым дескриптором. epoll_wait(2) всегда будет ждать этого события; его не нужно устанавливать в events.
EPOLLHUP
Произошло зависание связанного файлового дескриптора. Вызов epoll_wait(2) будет всегда ждать этого события; его не нужно указывать в events.
EPOLLET
Установить поведение Edge Triggered для связанного файлового дескриптора. Поведение по умолчанию для epoll равно Level Triggered. Более подробное описание архитектуры распределения событий Edge и Level Triggered смотрите в epoll(7).
EPOLLONESHOT (начиная с Linux 2.6.2)
Установить однократное получение для связанного файлового дескриптора. Это означает, что после извлечения события с помощью epoll_wait(2) со связанным дескриптором приём отключается и о других событиях интерфейс epoll сообщать не будет. Пользователь должен вызвать epoll_ctl() с операцией EPOLL_CTL_MOD для переустановки новой маски событий для файлового дескриптора.
 

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

При успешном выполнении epoll_ctl() возвращается ноль. При возникновении ошибок epoll_ctl() возвращает -1 и устанавливает errno в соответствующее значение.  

ОШИБКИ

EBADF
epfd или fd не является правильным файловым дескриптором.
EEXIST
Значение op равно EPOLL_CTL_ADD, и указанный файловый дескриптор fd уже зарегистрирован в данном экземпляре epoll.
EINVAL
Значение epfd не является файловым дескриптором epoll, или значение fd равно epfd, или запрашиваемая операция op не поддерживается данным интерфейсом.
ENOENT
В op было указано EPOLL_CTL_MOD или EPOLL_CTL_DEL, а fd не было зарегистрировано в данном экземпляре epoll.
ENOMEM
Недостаточно памяти для обработки запрошенной управляющей операции op.
ENOSPC
При попытке регистрации (EPOLL_CTL_ADD) нового файлового дескриптора в экземпляре достигнут предел, накладываемый /proc/sys/fs/epoll/max_user_watches. Подробней см. в epoll(7).
EPERM
Файл назначения fd не поддерживает epoll.
 

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

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

ЗАМЕЧАНИЯ

Интерфейс epoll поддерживает все файловые дескрипторы, которые поддерживает poll(2).  

ДЕФЕКТЫ

В ядрах до версии 2.6.9 для операции EPOLL_CTL_DEL в event требовался указатель со значением не равным NULL, хотя этот аргумент игнорировался. Начиная с Linux 2.6.9, при EPOLL_CTL_DEL в event можно указывать NULL. В переносимых приложениях, которые должны быть работоспособными в системах на ядрах до 2.6.9, в event нужно указывать указатель со значением не равным NULL.  

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

epoll_create(2), epoll_wait(2), poll(2), epoll(7)


 

Index

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

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

SVENSKA - SVENSKA - ja