epoll_ctl() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

epoll_ctl() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

epoll_ctl - epoll描述符的控制接口

概要

#include <sys/epoll.h> 

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

描述

通过请求对目标文件描述符fd执行操作op来控制epoll描述符epfdevent描述与文件描述符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 events */ epoll_data_t data; /* User data variable */ };

events成员是由以下可用事件类型组成的位集

错误代码描述
EPOLLIN关联文件可用于read(2)操作。
EPOLLOUT 关联文件可用于write(2)操作。
EPOLLRDHUP 流套接字对等端关闭连接,或关闭连接的写入部分。(此标志对于编写检测对等端在使用边缘触发监控时的关闭的简单代码特别有用。)
EPOLLPRI 有紧急数据可用于read(2)操作。
EPOLLERR 关联文件描述符上发生错误条件。epoll_wait(2) 将始终等待此事件;无需在events中设置它。
EPOLLHUP 关联文件描述符上发生挂起。epoll_wait(2) 将始终等待此事件;无需在events中设置它。
EPOLLET 为关联文件描述符设置边缘触发行为。epoll的默认行为是水平触发。有关边缘触发和水平触发事件分发体系结构的更多详细信息,请参见epoll(7)。
EPOLLONESHOT(自内核 2.6.2 起)为关联文件描述符设置一次性行为。这意味着在使用epoll_wait(2)提取事件后,关联文件描述符会在内部禁用,并且epoll接口将不会报告其他事件。用户必须使用EPOLL_CTL_MOD调用epoll_ctl(2)来使用新的事件掩码重新启用文件描述符。
epoll接口支持所有支持poll(2)的文件描述符。op参数的有效值为
 
代码描述
EPOLL_CTL_ADD 将目标文件描述符fd添加到epoll描述符epfd,并将事件event与链接到fd的内部文件关联。
EPOLL_CTL_MOD 更改与目标文件描述符fd关联的事件event
EPOLL_CTL_DEL epoll文件描述符epfd中删除目标文件描述符fdevent被忽略,可以为NULL(但请参见下面的BUG)。

返回值

成功时,epoll_ctl(2)返回零。发生错误时,epoll_ctl(2)返回-1,并适当地设置errno

错误

错误代码描述
EBADF epfdfd不是有效的文件描述符。
EEXIST op为EPOLL_CTL_ADD,并且提供的文件描述符fd已在epfd中。
EINVAL epfd不是epoll文件描述符,或者fdepfd相同,或者此接口不支持请求的操作op
ENOENT op为EPOLL_CTL_MOD或EPOLL_CTL_DEL,并且fd不在epfd中。
ENOMEM 内存不足以处理请求的op控制操作。
EPERM 目标文件fd不支持epoll

符合标准

epoll_ctl(2)是Linux内核2.5.44中引入的新API。该接口应由Linux内核2.5.66完成。

错误

在2.6.9之前的内核版本中,EPOLL_CTL_DEL操作需要event中的非空指针,即使此参数被忽略也是如此。自内核2.6.9起,使用EPOLL_CTL_DEL时,event可以指定为NULL。

参见



previous next Printer Friendly

广告


  

广告



广告