`
cqphper
  • 浏览: 23470 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
社区版块
存档分类
最新评论

epoll用法说明

阅读更多
epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:
所用到的数据结构
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 */
};
结构体epoll_event 被用于注册所感兴趣的事件和回传所发生待处理的事件,其中epoll_data 联合体用来保存触发事件的某个文件描述符相关的数据,例如一个client连接到服务器,服务器通过调用accept函数可以得到于这个client对应 的socket文件描述符,可以把这文件描述符赋给epoll_data的fd字段以便后面的读写操作在这个文件描述符上进行。epoll_event 结构体的events字段是表示感兴趣的事件和被触发的事件可能的取值为:
EPOLLIN :表示对应的文件描述符可以读;
EPOLLOUT:表示对应的文件描述符可以写;
EPOLLPRI:表示对应的文件描述符有紧急的数据可读(我不太明白是什么意思,可能是类似client关闭   socket连接这样的事件);
EPOLLERR:表示对应的文件描述符发生错误;
EPOLLHUP:表示对应的文件描述符被挂断;
EPOLLET:表示对应的文件描述符有事件发生;
所用到的函数:
1、epoll_create函数
      函数声明:int epoll_create(int size)
     该函数生成一个epoll专用的文件描述符,其中的参数是指定生成描述符的最大范围(我觉得这个参数和select函数的第一个参数应该是类似的但是该怎么设置才好,我也不太清楚)。
2、epoll_ctl函数
      函数声明:int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
     该函数用于控制某个文件描述符上的事件,可以注册事件,修改事件,删除事件。
     参数:epfd:由 epoll_create 生成的epoll专用的文件描述符;
                 op:要进行的操作例如注册事件,可能的取值EPOLL_CTL_ADD 注册、EPOLL_CTL_MOD 修
                         改、EPOLL_CTL_DEL 删除
                 fd:关联的文件描述符;
                 event:指向epoll_event的指针;
     如果调用成功返回0,不成功返回-1
3、epoll_wait函数
函数声明:int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout)
该函数用于轮询I/O事件的发生;
参数:
epfd:由epoll_create 生成的epoll专用的文件描述符;
epoll_event:用于回传代处理事件的数组;
maxevents:每次能处理的事件数;
timeout:等待I/O事件发生的超时值;
返回发生事件数。
分享到:
评论

相关推荐

    Linux 2.6 内核Epoll用法举例说明

    epoll用到的所有函数都是在头文件sys/epoll.h中声明的,本文简要说明所用到的数据结构和函数。

    epoll 手册 man 翻译 使用说明

    epoll 是 Linux 内核提供的一种高效 I/O 多路复用技术,它相比传统的 select 和 poll 方法具有更好的性能和灵活性。epoll 的主要特点是可以处理大量文件描述符的监控任务而不会出现性能瓶颈,并支持两种触发模式:...

    Linux环境下Epoll系统调用实现web服务器并发工作

    Epoll是I/O多路复用技术的一种,它改进了早期的select和poll方法。Epoll提供了“边缘触发”(ET)和“水平触发”(LT)两种模式,以及“事件就绪通知”的概念,使得它在处理大量并发连接时表现更优。相比于select和poll...

    基于VC开发epoll程序方案和源码.rar

    2. **epoll**:epoll是Linux内核提供的IO多路复用技术,它改进了旧的select和poll方法,提供了更高效的文件描述符管理,特别适合高并发的网络服务。epoll通过边缘触发(ET)和水平触发(LT)两种模式来处理事件,...

    基于C++使用 epoll + threadpool 实现的 webServer,支持GET、POST

    【项目介绍】:该项目是一个简单的webServer,使用 epoll + threadpool 实现,支持GET、POST方法,可以实现html、jpg、png、ico、MP3、js、css等文件的解析,在POST方法的处理中使用CGI服务器进行计算并返回结果。...

    python实现Linux异步epoll代码

    这篇内容将深入探讨如何使用Python实现基于`epoll`的异步网络服务器。 首先,`epoll`的核心功能在于它能够注册一组文件描述符(FD),并在这些FD上监控多种事件,如读就绪、写就绪、异常等。当被监控的事件发生时,...

    C语言并行爬虫(epoll).zip

    - GET请求:网络爬虫通常使用GET方法向服务器请求网页内容。 - HTTP响应头与状态码:理解HTTP响应头的结构和状态码的含义,例如200表示成功,404表示未找到资源。 4. **多线程编程**: - pthread库:C语言中的多...

    nginx优化详细

    - 使用 `epoll` 作为事件处理模型,这是 Linux 下最高效的模型之一。 - 设置较大的 `worker_connections` 数值,根据服务器性能和内存容量进行调整。 - 启用 `multi_accept` 提高处理新连接的效率。 - 示例配置...

    EpollMode 模式的实现类代码

    文档可能详细介绍了`EpollMode`类的使用方法,包括如何创建实例、添加文件描述符、处理事件,以及注意事项等。阅读文档有助于理解和使用这个库。 6. **utf-8编码**: 代码使用`utf-8`编码,这是一种通用的字符...

    netty-transport-classes-epoll-4.1.74.Final.jar中文-英文对照文档.zip

    # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作...

    netty-transport-classes-epoll-4.1.73.Final.jar中文-英文对照文档.zip

    # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作...

    server.rar

    epoll相对于传统的select和poll方法,有更高的效率和可扩展性,尤其在面对大量并发连接时。线程池则可以帮助避免频繁创建和销毁线程的开销,提高系统的响应速度和资源利用率。 在Linux环境中,C++被用于实现这个...

    基于C++实现的轻量级Web服务器源码+项目说明.zip

    使用epoll + 非阻塞IO + 边缘触发(ET) 实现高并发处理请求,使用Reactor编程模型 epoll使用EPOLLONESHOT保证一个socket连接在任意时刻都只被一个线程处理 使用线程池提高并发度,并降低频繁创建线程的开销 同步...

    接口说明性ZL代码代码

    接口说明性ZL代码通常指的是用于描述和实现这些接口的代码,旨在提供清晰的文档和可读性,方便其他开发者理解和使用。ZLMediaKit是一个与服务器相关的开源项目,可能是用于处理多媒体流传输的库。下面我们将深入探讨...

    Java NIO原理和使用

    Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能...通过仔细阅读这个例程,相信你已经大致了解NIO的原理和使用方法,下一篇,我们将使用多线程来处理这些数据,再搭建一个自己的Reactor模式。

    基于C++实现的HTTP服务器改进版源码+项目使用说明+详细注释.zip

    基于C++实现的HTTP服务器改进版源码+项目使用说明+详细注释.zip 1、技术架构 **本项目实现了基于Epoll管理连接、基于定时器处理非活动连接、基于线程池实现Reactor模式、基于cgi脚本处理http请求结果的HTTP服务器...

    一种基于局域网的软件许可证动态授权管理方法.pdf

    综上所述,这种基于局域网的软件许可证动态授权管理方法通过epoll的并发处理和心跳探测的网络监控,实现了许可证的高效管理和优化使用,为局域网环境下的软件授权提供了一种智能且适应性强的解决方案。这一发明对于...

    C语言后台代码

    6. **Readme**:Readme文件通常包含了项目的介绍、使用方法、注意事项等信息,是理解和使用项目的关键。在下载后,应首先阅读Readme以了解如何正确编译、运行和使用提供的代码。 通过学习和理解这些核心知识点,...

    libuv API说明及用例

    ### libuv API说明及用例知识点详解 #### 一、概述 **libuv** 是一个多平台支持库,其设计核心在于提供高效的异步 I/O 操作。最初为 Node.js 而开发,但随后也被其他项目如 Luvit、Julia 和 pyuv 等采用。该库的...

    netty-transport-4.1.68.Final-API文档-中英对照版.zip

    使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

Global site tag (gtag.js) - Google Analytics