首页 > 系统相关 >【Linux系统编程】libevent库事件驱动

【Linux系统编程】libevent库事件驱动

时间:2024-04-10 21:13:51浏览次数:61  
标签:struct libevent 监听 事件驱动 base Linux include event 函数

libevent库事件驱动

libevent库使用

  1. 创建并初始化event_base结构体。
  2. 创建并初始化event结构体,并设置文件描述符、监听事件、回调函数、回调函数参数。
  3. event添加到event_base中。
  4. 开始事件处理循环,监听事件是否发生,并在满足条件时自动调用回调函数。
  5. 事件处理完成后,释放event结构体的内存空间。
  6. 全部事件处理完成后,释放event_base结构体的内存空间。

相关函数

event_new()

函数说明
初始化event结构体。

函数原型

#include <event.h>
#include <event2/event.h>
struct event* event_new(struct event_base *base,
			evutil_socket_t fd,
			short events,
			event_callback_fn callback,
			void *callback_arg);

函数参数

  • struct event_base *baseevent将被添加到哪一个event_base
  • evutil_socket_t fd:要监听的文件描述符
  • short events:要监听的事件
    • #define EV_TIMEOUT 0x01:超时事件
    • #define EV_READ 0x02:读事件
    • #define EV_WRITE 0x04:写事件
    • #define EV_SIGNAL 0x08:信号事件
    • #define EV_PERSIST 0x10:周期性触发
    • #define EV_ET 0x20:边缘触发,需要底层事件I/O方法支持
  • event_callback_fn callback:回调函数
    • 回调函数定义:typedef void(* event_callback_fn) (evutil_socket_t, short, void *)
      • evutil_socket_t fd:监听的文件描述符,与event_new中的fd相同
      • short events:监听的事件,与event_new中的events相同
      • void *arg:回调函数的参数
  • void *callback_arg:要传递给回调函数的参数

函数返回值

  • struct event*
    • 成功返回初始化的event结构体指针
    • 失败返回nullptr

event_add()

函数说明
event添加到event_base监听集合。

函数原型

#include <event.h>
#include <event2/event.h>
int event_add	(struct event *ev,
		 const struct timeval *timeout);

函数参数

  • struct event *ev:要添加的event结构体
  • const struct timeval *timeout:事件监听的超时时间
    • struct timeval { long tv_sec; long tv_usec;};
      • long tv_sec:秒
      • long tv_usec:微秒

函数返回值

  • int
    • 成功返回0
    • 失败返回-1

event_del()

函数说明
eventevent_base监听移除。

函数原型

#include <event.h>
#include <event2/event.h>
int event_del(struct event *ev);

函数参数

  • struct event *ev:要删除的event结构体

函数返回值

  • int
    • 成功返回0
    • 失败返回-1

event_free()

函数说明
释放event结构体内存空间

函数原型

#include <event.h>
#include <event2/event.h>
void event_free(struct event *);

函数参数

  • struct event *:要释放空间的event结构体指针

event_base_loop()

函数说明
开始事件监听循环。

函数原型

#include <event.h>
#include <event2/event.h>
int event_base_loop(struct event_base *eb, int flags);

函数参数

  • struct event_base *eb:要开始监听的event_base结构体
  • int flags:监听方式的标志
    • 0:不设置标志位,默认处理方式,如果event_base中没有需要监听的事件则退出循环,或者被函数中止
    • #define EVLOOP_ONCE 0x01:阻塞等待事件满足,处理完所有满足条件的事件后,函数返回
    • #define EVLOOP_NONBLOCK 0x02:非阻塞处理满足条件的事件,如果没有满足条件的事件,直接返回,否则处理完所有事件后返回
    • #define EVLOOP_NO_EXIT_ON_EMPTY 0x04:一直循环监听,即使监听事件集合为空也不退出,直到被函数中止

函数返回值

  • int
    • 正常退出返回0
    • 出错返回-1

event_base_dispatch()

函数说明
相当于event_base_loop(eb, 0),使用默认处理方式监听处理事件。

函数原型

int event_base_dispatch(struct event_base *base);

event_base_loopexit()

函数说明
退出事件监听循环,该函数在等待下一次超时后,处理所有激活的事件,然后退出循环。

函数原型

#include <event.h>
#include <event2/event.h>
int event_base_loopexit(struct event_base *eb, const struct timeval * tv);

函数参数

  • struct event_base *eb:要退出监听循环的event_base结构体指针
  • const struct timeval * tv:等待退出循环的超时时间

函数返回值

  • int
    • 正常退出返回0
    • 出错返回-1

event_base_loopbreak()

函数说明
立即退出事件监听循环,在处理完目前的事件后立即退出循环。

函数原型

#include <event.h>
#include <event2/event.h>
int event_base_loopbreak(struct event_base *eb);

函数参数

  • struct event_base *eb:要退出监听循环的event_base结构体指针

函数返回值

  • int
    • 正常退出返回0
    • 出错返回-1

标签:struct,libevent,监听,事件驱动,base,Linux,include,event,函数
From: https://www.cnblogs.com/yangxuanzhi/p/18126409

相关文章

  • 在Linux终端查找指定类型的文件并统计数量
    下面举例说明:find/path/to/directory-typef-execfile{}\;|grep"MIDI"它的作用是在指定的目录(/path/to/directory)中搜索所有的文件(-typef),然后使用file命令检查每个文件的类型,并将结果通过管道传递给grep命令,用于过滤出包含"MIDI"关键词的文件信息。find:......
  • Linux文件和目录管理及文本搜索命令find grep
    在Linux操作系统中,“find”和“grep”是两个非常常用的命令,它们在文件和目录管理以及文本搜索方面提供了强大的功能。首先,让我们来看一下"find"命令。“find"命令用于在文件系统中搜索文件和目录。它可以根据指定的条件来搜索文件,如文件名、文件大小、权限等。例如,如果......
  • Linux之文件查找
    一.find  路径  条件  动作1.按文件名查找eg:find/etc-name"zxy"查找所有以8开头以9结尾的文件eg: find/ -name"8*"-o-name"*9" 2.按文件类型查找find/dev-typef查找普通文件d目录l链接b块设备c字符设备s套接字p管道文件3.按文件大小来......
  • 17. Linux内核运行方式
    【Linux简介】操作系统启动过程计算机启动后CPU从默认的地址处读取NORFlash存储器中的固件执行,固件检测计算机各种设备工作正常后,去辅存查询下一个程序执行,这个程序就是操作系统启动入口、或者操作系统安装程序执行入口,查询方式有如下两种。Legacy方式此方式在辅存的......
  • 查看哪些IP尝试爆破你的Linux服务器
    苯人有一台服务器,由于没有设置什么sship过滤规则,经常被扫描,所以今天在此查看一下是哪些倒运鬼东西一直扫描的,把它们给屏蔽了。以下是苯人服务器环境:Ubuntu20.04LTSssh认证的日志会记录在/var/log/auth.log中(在ubuntu16.04之前似乎是/var/log/secure)一般认证失败的日志有......
  • Linux清除记录的常见方式
    隐藏远程SSH登陆记录清除当前的history记录隐藏Vim的操作记录隐藏文件修改时间锁定文件清除系统日志痕迹1.隐藏远程SSH登陆记录隐身登录系统,不会被w、last等指令检测到。[email protected]/bin/bash-i-T表示不分配伪终端,/usr/bin/bash表示在登录后......
  • linux服务器 tcp高并发压测需要设置项
    linux服务器部署了一个tcp服务,需要进行并发压力测试 看看服务器能支持多少个tcp长连接  预计会有50w个连接需要设置linux不然是无法支持这么多连接的  如果达到这个值是无法建立新连接的 报错信息一般为 toomanyopenfiles 1, fs.file-max li......
  • Linux网络命名空间命令实操
    背景之前在《Linux系统的网络命名空间那些事》一文中分享了关于网络命名空间的名称的介绍,了解了系统的网络命名空间名称和网络命名空间标识符以及容器的网络命令空间标识符的事情。本文分享一下Linux网络命名空间的实际操作。分析Linux的网络命名空间提供了隔离的网络环境,......
  • 4、Linux 网络基础
    1.基础命令hostname:查看或设置当前主机名route[-n]:查看或设置主机中路由表信息netstat:查看系统的网络连接状态、路由表、接口统计等信息常用选项-a:显示所有-n:以数字输出-p:带端口-t:TCP协议-u:UDP协议-r:查路由表traceroute:测试从当前主机到目标主机之间经过的网络节点nsl......
  • Burp Suite Professional 2024.3.1 (macOS, Linux, Windows) - Web 应用安全、测试和
    BurpSuiteProfessional2024.3.1(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:BurpSuiteProfessional2024.3.1(macOS,Linux,Windows)-Web应用安全、测试和扫描,查看最新版。......