libevent

news/2024/12/22 20:30:53/

一、libevent库的安装(ubuntu)

  1. root用户运行以下命令:
apt-get install libevent-dev
  1. 非root用户:
sudo apt-get install libevent-dev
  1. 编译命令
gcc 文件名 -o 文件名 -levent

二、libevent-IO事件

步骤:

  1. 创建事件
  2. 初始化事件集合
  3. 初始化事件:把fd和事件ev绑定
  4. 把事件添加到集合中
  5. 开始监听

1.event

event 结构体是 libevent 库中的一个核心结构,用于表示一个事件。它包含了事件的各种属性和状态信息,以及与事件相关的回调函数和超时设置。

2.event_init

在 libevent 中,event_init 函数仍然是用于初始化事件的正确函数。
以下是 event_init 函数的用法示例:

void event_init(void);

这个函数用于初始化 libevent 库。它在使用 libevent 之前必须被调用一次。event_init 函数会执行一些必要的初始化操作,以确保 libevent 正常工作。

在调用 event_init 函数后,你可以使用其他 libevent 函数来创建事件、设置事件回调函数、添加事件到事件循环等。

3.event_set

在 libevent 中,event_set 函数用于设置事件的属性和回调函数。它可以用于指定事件的文件描述符、事件类型、回调函数等。
以下是 event_set 函数的用法示例:

int event_set(struct event *ev, int fd, short events, void (*callback)(int, short, void *), void *arg);

参数:

  • ev:指向要设置属性的事件结构体的指针。
  • fd:事件的文件描述符。
  • events:事件的类型
    在 libevent 中,事件类型由以下宏定义表示:
    • EV_TIMEOUT:超时事件,即在指定的时间间隔之后触发。
    • EV_READ:读事件,当文件描述符可读时触发。
    • EV_WRITE:写事件,当文件描述符可写时触发。
    • EV_SIGNAL:信号事件,当指定的信号发生时触发。
    • EV_PERSIST:持久事件,即事件在触发后仍然保持激活状态,直到显式删除。
    • EV_ET:边缘触发事件,仅在文件描述符状态发生变化时触发一次。

这些宏可以单独使用,也可以通过按位或运算符(|)进行组合,以便同时指定多个事件类型。

  • callback:事件发生时要调用的回调函数的指针。
  • arg:传递给回调函数的参数。

返回值:
该函数返回一个整数值,表示函数调用的结果。如果成功设置事件属性,则返回 0;否则返回 -1。

4.event_add

在 libevent 中,event_add 函数用于将事件添加到事件循环中,以便在事件发生时触发相应的回调函数。
以下是 event_add 函数的用法示例:

int event_add(struct event *ev, const struct timeval *tv);

参数:

  • ev:指向要添加到事件循环的事件结构体的指针。
  • tv:指向 struct timeval 结构体的指针,用于指定事件的超时时间。如果为 NULL,事件将无限期地等待触发。

返回值:
该函数返回一个整数值,表示函数调用的结果。如果成功将事件添加到事件循环中,则返回 0;否则返回 -1。

5.event_dispatch

在 libevent 中,event_dispatch 函数用于开始事件循环,等待事件的发生并触发相应的回调函数。
以下是 event_dispatch 函数的用法示例:

int event_dispatch(void);

返回值:
该函数返回一个整数值,表示函数调用的结果。如果事件循环正常结束,则返回 0;否则返回 -1。

6.代码实例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <event.h>
#include <unistd.h>
#include <stdlib.h>//执行event_set函数时,会把event_set中的fd和ev参数传给回调函数(在这即fifo_read)
void fifo_read(evutil_socket_t fd, short events, void *arg)
{char buf[32] = {0};int ret = read(fd, buf, sizeof(buf));if(-1 == ret){perror("read");exit(3);}printf("从管道读取的内容:%s\n", buf);
}int main()
{   //创建管道int ret = mkfifo("fifo.tmp", 00700);if(-1 == ret){   perror("mkfifo0");exit(1);}   int fd = open("fifo.tmp", O_RDONLY);if(-1 == fd) {   perror("open");exit(2);}//创建事件struct event ev;//初始化事件集合event_init();//初始化事件(把fd和事件ev绑定)//参数:事件,关联的文件描述符,事件类型,回调函数,回调函数参数event_set(&ev, fd, EV_READ | EV_PERSIST, fifo_read, NULL);//把事件添加到集合中event_add(&ev, NULL);//开始监听event_dispatch(); //死循环,如果集合中没有事件可以监听,则返回return 0;}

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

相关文章

【从Python基础到深度学习】2. Ubuntu及插件安装

本期所有软件安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1UVEYm-12FivAnrE5NUXevg?pwdum60 一、安装Ubuntu 1.1 软件安装包&#xff1a;下载 VMware Workstation Pro | CN 一直点下一步即可 1.2 双击运行软件&#xff1a; 输入密钥 1 、VMware 15密钥 …

Python商业数据挖掘实战——爬取网页并将其转为Markdown

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言前言正则表达式进行转换送书活动 前言 在信息爆炸的时代&#xff0c;互联网…

(十三)springboot实战——springboot前后端分离方式项目集成spring securtity安全框架

前言 Spring Security 是一款强大且高度可定制的认证和访问控制框架&#xff0c;它是为了保护基于Spring的应用程序提供安全性支持。Spring Security提供了全面的安全服务&#xff0c;主要针对企业级应用程序的需求。其核心组件主要包含&#xff1a;Authentication&#xff08…

Days 23 ElfBoard 板git版本管理工具

一、 介绍 git 就是一个版本管理库&#xff0c;也是一个版本管理工具&#xff0c;它的作用就是帮助我们记录版本信息&#xff0c;以及修改内容。git 的结构是分布式的资源库&#xff0c;特点是没有严格的服务器概念&#xff0c;每个单体都可作为资源库。这个特点就让我们人人有…

【案例】--分布式”雪花算法案例

目录 一、前言二、技术方案实现2.1、技术方案实现12.2、技术方案实现2三、存在的问题3.1、kygoException异常问题3.2、redis随机命令被禁止问题四、完整的“分布式雪花算法”代码一、前言 前段时间线上系统出现一个严重的bug:一个表中插入两条一样的id记录信息(该字段未设置唯…

ansible shell模块 可以用来使用shell 命令 支持管道符 shell 模块和 command 模块的区别

这里写目录标题 说明shell模块用法shell 模块和 command 模块的区别 说明 shell模块可以在远程主机上调用shell解释器运行命令&#xff0c;支持shell的各种功能&#xff0c;例如管道等 shell模块用法 ansible slave -m shell -a cat /etc/passwd | grep root # 可以使用管道…

鸿蒙系统进一步学习(一):学习资料总结,少走弯路

随着鸿蒙Next的计划越来越近&#xff0c;笔者之前的鸿蒙系统扫盲系列中&#xff0c;有很多朋友给我留言&#xff0c;不同的角度的问了一些问题&#xff0c;我明显感觉到一点&#xff0c;那就是许多人参与鸿蒙开发&#xff0c;但是又不知道从哪里下手&#xff0c;因为资料太多&a…

Stable Diffusion 模型下载:majicMIX fantasy 麦橘幻想

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十