首页 > 其他 > 详细

epoll系统调用

时间:2021-01-30 21:20:08      阅读:37      评论:0      收藏:0      [点我收藏+]
1 #include <sys/epoll.h>
2 int epoll_create(int size);//创建一个epfd,标识内核中的事件表
3 int epoll_ctl(int epfd, int op,int fd, struct epoll_event *event);//向epfd中添加,删除,修改事件
4 int epoll_wait(int epfd, structepoll_event * events, int maxevents, int timeout);//从epfd中取出实际发生的事件

  epoll使用一组函数来完成任务,将用户感兴趣的fd上的事件放在内核里的一个事件表中,epoll使用一个额外的fd来唯一标识内核中的这个事件表。

int epoll_create(int size);

  size:给内核一个提示,告诉内核事件表需要多大;

  返回值:返回一个fd,标识内核事件表;

 

 

int epoll_ctl(int epfd, int op,int fd, struct epoll_event *event);
  epfd:标识内核事件表的fd;
  op:指定操作类型;
    EPOLL_CTL_ADD-向epfd上注册fd上的事件;EPOLL_CTR_MOD-修改fd上注册的事件;EPOLL_CTL_DEL-删除fd上注册的事件;
  fd:要操作的fd;
  event:epoll_event结构指针类型(含epoll的事件类型和事件对应的fd)
 1 struct epoll_event
 2 {
 3     _uint32_t events; //epoll的事件类型
 4     epoll_data_t data; //联合体,存储用户数据
 5 };
 6 
 7 typedef union epoll_data
 8 {
 9     void* ptr;
10     int fd; //事件所从从属的fd,使用最多
11     uint32_t u32;
12     uint64_t u64;
13 }epoll_data_t; //联合体,同一时刻只能保存一个成员的值
  epoll的事件类型:
  E
POLLIN-数据可读;EPOLLRDNORM-普通数据可读;EPOLLRDBAND-优先级带数据可读;EPOLLPRI-高优先级数据可读;
  EPOLLOUT-数据可写;EPOLLWRNORM-普通数据可写;EPOLLWRBAND-优先级带数据可写;
  EPOLLRDHUP-TCP连接对方关闭或者对方关闭了写操作;
  EPOLLERR-错误;EPOLLHUP-挂起;EPOLLNVAL-fd没有打开;
  EPOLLET,EPOLLONESHOT.
  返回值:调用成功,返回0;调用失败,返回-1。

int epoll_wait(int epfd, structepoll_event * events, int maxevents, int timeout);
  epfd:标识内核事件表的fd;
  events:epoll_event结构类型的红黑树(红黑树的元素为结构体);
  maxevents:监听fd的数量;
  timeout:设置epoll的超时时间,单位为毫秒;
  返回值:timeout=0,epoll_wait调用立即返回;timeout=-1,epoll_wait调用阻塞,直到某个事件发生。
      调用成功,返回就绪的数量;调用失败,返回-1并设置errno。
  epoll_wait函数如果检测到就绪事件,就将就绪事件从epfd标识的内核事件表中复制到events指向的红黑树中(仅含检测到的就绪事件)。

 
 

 

  

epoll系统调用

原文:https://www.cnblogs.com/yongjin-hou/p/14350023.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!