epoll的笔记

epoll实例就是由epoll_create()返回的描述符
epoll_create()
epoll_ctl()
epoll_wait()
都是系统调用

epoll_ctl()传入的最后一个参数 struct epoll_event* event, event结构体中的data字段。
注:结构体类型的变量名不是地址,还是要加取值符号&。相当于基本数据类型的变量名
struct eopll_event{
uint32_t events;
epoll_data_t data;
};

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

data字段是联合体epoll_data_t 的实例。用处是当epoll_ctl()指定的fd就绪(就绪表示该fd有事件发生),指定传回给调用进程的信息。

epoll_wait()中的struct epoll_event *evlist,evlist是事件数组,每个元素都是epoll_event结构体,代表不同的文件描述符。
epoll_wait返回0表示没有就绪时间。返回-1表示错误。
timeout形参 = -1表示调用epoll_wait后一直阻塞直至有就绪的fd。
= 0表示进行非阻塞检查,看看兴趣列表中的fd上产生了哪些事件。
>0表示将阻塞这么多毫秒,当然,如果这么多毫秒内有就绪的fd,直接返回。

下面程序通过open打开了多个文件,生成多个fd,并加入到epoll的兴趣列表中,只关注这些文件上发生的EPOLLIN事件。
通过epoll_wait进入阻塞,如果其中某个文件或者多个文件发生了事件,则epoll_wait会返回发生发生事件的文件的数目ready。循环ready次,每一次通过evlist数组读取该次的fd信息,比如是哪个文件发生了事件(evlist[ j ].data.fd),什么事件(evlist[ j ].events)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值