epoll提供的接口

news/2024/11/30 5:47:00/

一、epoll提供的接口

1、epoll_create

接口声明:int epoll_create(int size)
接口功能:创建一个epoll对象,用来管理需要监控的fd
接口参数:需要监控的fd个数,这个值是在创建epoll对象时进行初始化会使用到,如果监控的fd超过这个值会动态的扩展,实际使用时传一个非负整数就可以
返回值:
1)success:返回epoll对象句柄
2)failure:-1

2、epoll_ctl

接口声明:int epoll_ctl(int epfd, int op, int fd, struct epoll_event * event)
接口功能:epoll的事件注册函数,注册要监控的事件类型
接口参数:
1)epfd:epoll句柄
2)op:表示动作,使用下面的三个宏表示
EPOLL_CTL_ADD:注册新的fd到epfd中
EPOLL_CTL_MOD:修改已经注册的fd的监听事件
EPOLL_CTL_DEL:从epfd中删除一个fd
3)fd:需要监控的fd
4)event:通知内核需要监控的事件,事件可以是下面几种类型的事件
EPOLLIN :表示链接可以读(tcp链接远端主动关闭连接,也是可读事件,因为需要处理发送过来的FIN包对应的就是read返回0)
EPOLLOUT:表示链接可以写数据
EPOLLPRI:表示链接有紧急的数据可读(这里应该表示有带外数据到来)
EPOLLERR:表示链接发生错误
EPOLLHUP:表示链接被挂断
EPOLLET: 将EPOLL设为边缘触发(Edge Triggered)模式,默认是水平模式(Level Triggered)
EPOLLRDHUP:表示tcp连接的远端关闭或半关闭链接
返回值:
1)success:返回值为0,表示事件注册成功
2)failure:返回值-1,表示事件注册失败

3、epoll_wait

接口声明:int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout)
接口功能:接收就绪队列中的事件,并把数据从内核态拷贝到用户态
接口参数:
1)epfd:epoll句柄
2)events:用户用来接收数据的缓存
3)maxevents:第二个参数是一个数组,这个参数标识数组的大小
4)timeout:超时时间,如果值为-1则一直等待。epoll_wait是一个阻塞接口,当就绪队列中有事件时,这个接口会被触发
返回值:
1)success:返回值为正整数,表示处于就绪状态的链接个数
2)failure:返回值-1

4、示例

#include <stdio.h>
#include <unistd.h>
#include <sys/epoll.h>int main(void)
{int epfd, nfds;struct epoll_event ev, events[5]; // ev用于注册事件,数组用于返回要处理的事件epfd = epoll_create(1);           // 只需要监听一个描述符——标准输入ev.data.fd = STDOUT_FILENO;ev.events = EPOLLOUT | EPOLLET;                     // 监听写状态同时设置ET模式epoll_ctl(epfd, EPOLL_CTL_ADD, STDOUT_FILENO, &ev); // 注册epoll事件for (;;) {nfds = epoll_wait(epfd, events, 5, -1);for (int i = 0; i < nfds; i++) {if (events[i].data.fd == STDOUT_FILENO) {printf("welcome to epoll's word!\n");}}}return 0;
}

http://www.ppmy.cn/news/45466.html

相关文章

校园网策列及思路

解决思路一&#xff1a; 适合以下情况也是我现在的学校校园网大概情况&#xff1a; 内网不认证情况下可以互联&#xff0c;除了几个常见端口封闭&#xff08;目前已知3389&#xff09;&#xff0c;要联网必须认证登录&#xff0c;而且一个号最多两台设备&#xff08;甚至有时候…

RabbitMQ( 发布订阅模式 ==> DirectExchange)

本章目录&#xff1a; 何为DirectExchangeDirectExchange具体使用 一、何为DirectExchange 在上一篇文章中&#xff0c;讲述了FanoutExchange&#xff0c;其中publish向交换机发送消息时&#xff0c;我们并没有指定routkingKey&#xff0c;如下图所示 我们看看官方文档 之前使…

Linux主机用WordPress搭建网站

文章目录 一、搭建过程1.1、切换到超户1.2、更新1.3、安装一些包1.4、安装wordpress1.5、配置MariaDB1.6、创建WordPress数据库1.7、配置WordPress1.8、登录WordPress1.9、安装phpMyAdmin 一、搭建过程 1.1、切换到超户 sudo su1.2、更新 apt-get update -y1.3、安装一些包 …

windows Linux :python 脚本 下载日本葵花8号卫星数据L1级产品,自定义分辨率、时间

前言介绍 近期需要用到日本葵花8号卫星数据&#xff0c;用于相关研究&#xff0c;而通过官方提供的下载方法&#xff0c;难以针对性的下载所需要的数据类型&#xff0c;因此这里编写了一个针对葵花8号卫星L1级数据产品的脚本下载&#xff0c;主要实现两个功能&#xff1a;1、自…

[Java·算法·困难]LeetCode10. 正则表达式匹配

每天一题&#xff0c;防止痴呆 题目示例分析思路1题解1 &#x1f449;️ 力扣原文 题目 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 …

JVM 垃圾回收详解之垃圾收集算法+垃圾收集器

标记-清除算法 该算法分为“标记”和“清除”阶段&#xff1a;首先标记出所有不需要回收的对象&#xff0c;在标记完成后统一回收掉所有没有被标记的对象。 它是最基础的收集算法&#xff0c;后续的算法都是对其不足进行改进得到。 这种垃圾收集算法会带来两个明显的问题&…

汽车CAN、LIN汇总

目录&#xff1a; 一、准备知识 1、什么是CAN 2、汽车网络发展时间轴 3、如何通信 4、CAN总线结构 1&#xff09;ISO 11898 2&#xff09;CAN 和 J1850的比较 3&#xff09;CAN 和 UART的比较 5、关于节点 1&#xff09;什么是节点 2&#xff09;节点&#xff1a;报文传…

DSL查询文档

目录 1、查询DSL基本语法2、基本查询类型3、复合查询FunctionScoreQuery案例&#xff1a;给名字为如家的品牌排名靠前一些 4、Boolean Query查询案例&#xff1a;如家酒店&#xff0c;价格<400,且在坐标10km范围内所有酒店 5、指定排序字段案例&#xff1a;根据用户评价排序…