libevent eventbuffer 事件缓冲区的使用

这篇具有很好参考价值的文章主要介绍了libevent eventbuffer 事件缓冲区的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include "watch.h"
#include <arpa/inet.h>
#include <event2/buffer.h>
#include <event2/bufferevent.h>
#include <event2/event.h>
#include <fcntl.h>
#include <stdint.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <zlog.h>

void read_cb(struct bufferevent *bev, void *arg) {
  size_t len = bufferevent_read(bev, arg, 1024);
  bufferevent_write(bev, arg, len);
}

void write_cb(struct bufferevent *bev, void *arg) { memset(arg, 0, 1024); }

void event_cb(struct bufferevent *bev, short events, void *arg) {
  if (events & BEV_EVENT_EOF) {
    printf("connection closed\n");
  } else if (events & BEV_EVENT_ERROR) {
    printf("some other error\n");
  }
  bufferevent_free(bev);
}

void on_connect(struct evconnlistener *listener, evutil_socket_t sock,
                struct sockaddr *addr, int len, void *ptr) {
  static char buffer[1024];
  printf("new client online: %s \n",
         inet_ntoa(((struct sockaddr_in *)addr)->sin_addr));
  struct event_base *base = (struct event_base *)ptr;
  struct bufferevent *bev;
  bev = bufferevent_socket_new(base, sock, BEV_OPT_CLOSE_ON_FREE);
  bufferevent_setcb(bev, read_cb, write_cb, event_cb, buffer);
  bufferevent_enable(bev, EV_READ);
}

int main(void) {
  struct watch watcher = {.log_conf = "./zlog.conf"};
  watcher.loop = event_base_new();
  struct sockaddr_in addr;
  addr.sin_family = AF_INET;
  bzero(addr.sin_zero, sizeof(addr.sin_zero));
  addr.sin_addr.s_addr = inet_addr("0.0.0.0");
  addr.sin_port = htons(4080);
  struct evconnlistener *listener = evconnlistener_new_bind(
      watcher.loop, on_connect, watcher.loop,
      LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE_PORT, 255,
      (const struct sockaddr *)&addr, sizeof(addr));
  return event_base_loop(watcher.loop, 0);
}

libevent 效果非常不错,维护255个链接毫无压力

Linux 嵌入式开发 libevent + libev 必须得掌握,少走弯路,而其,这种设计思路适用于,工作时间一长发现,在嵌入式这块儿的软件开发,可以解决,很多痛点,不局限于网络开发,驱动的参数调优检测,其实也完全适用, 源码的观看,要比内核天书还是容易些的

最近感觉有点迷茫,又感觉自己啥都不会了 … … 心情极度郁闷 … …
RUST C++ 熟练度达不到 C 和 PYTHON LUA BASH 的程度
常规算法又不想刷题,但是还有好多不会 … … …
内核的驱动框架中的各个子系统又不想深入弄了,郁闷… …
网络协议栈的深入理解和调试方法,也不想在深入弄了,更郁闷… …
他娘的,总之感觉无穷无尽

FSBL UBOOT 没啥可弄的,除非有其他的定制需求
hardware i2c spi usb can mdio pwm libmeta ethernet dsa (多核心通信调用计算) -> BSP 和 linux driver framework
yocto,buildroot
ptp 协议栈还得深耕,包括算法和芯片驱动 (好多 … …)
时钟芯片的原理和配置方法 (好多 … …)
射频芯片的架构和基础原理和参数调优(好多 … …)
射频系统的参数调优和基础原理(好多… …)
现有运营商,需要的射频各种解决方案 (好多 … …)
C(RUST) 做底层开发(又linux 系统 的底层),单片机(RUST 完全没必要) libevent libuv
C++ 做次底层开发 (network) [NETCONFIG] 有现成的库 和框架,机制健全 (网络应用TCP,UDP)
LUA 做热补丁调用(拓展LUA 插件方便容易,和自定应Lua 解释器)
PYTHON 软件调试|(QT C++)(QT PY) | 算法模拟 TREE LIST STACK HEAP QUEUE 小规模并发处理 | 数据可视化
后来发现基于(树结构的各种排序算法),可优化,事件的调度, 这个还得学,还得会证明
射频的参数调优和测试, 基础理论还得恶补一些
数字电路还得在刷一些bilibili 的视频
… …
… …

唉,底层软件开发完全是调度计算工具和参数自动调优的工具 … …文章来源地址https://www.toymoban.com/news/detail-644249.html

妈的,学习的事儿放一放,明年这个时候,我要有4块腹肌 … … , 今天先吃顿大的

到了这里,关于libevent eventbuffer 事件缓冲区的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】深入理解缓冲区

    目录 什么是缓冲区 为什么要有缓冲区 缓冲区刷新策略 缓冲区在哪里  手动设计一个用户层缓冲区 缓冲区本质上一块内存区域,用来保存临时数据。 缓冲区在各种计算任务中都广泛应用,包括输入/输出操作、网络通信、图像处理、音频处理等。 这块内存区域是由 谁提供的

    2024年02月15日
    浏览(52)
  • 浅谈linux缓冲区的认识!

    今天来为大家分享一波关于缓冲区的知识!那么既然我们要谈缓冲区,那么就得从是什么?为什么?有什么作用这几个方面来谈论一下缓冲区!然后再通过一些代码来更加深刻的理解缓冲区的知识! 从最简单的理解方面来,我们可以将缓冲区理解成一块内存!那么这块内存是

    2024年02月05日
    浏览(37)
  • Linux之缓冲区的理解

    目录 一、问题引入 二、缓冲区 1、什么是缓冲区 2、刷新策略 3、缓冲区由谁提供 4、重看问题 三、缓冲区的简单实现 我们先来看看下面的代码:我们使用了C语言接口和系统调用接口来进行文件操作。在代码的最后,我们还使用fork函数创建了一个子进程。  代码运行结果如

    2024年02月03日
    浏览(35)
  • 【Linux】深入理解文件缓冲区

    问题引入 首先看一段代码: 运行代码,结果如下: 如果此时将输出结果重定向一下: 会发现 printf 、 fwrite 都打印了两次。 究其原因,就要谈到缓冲区和缓冲区刷新策略的概念了。 如何理解缓冲区 假设你在青岛,你要从网上买一件商品,商家所在地是北京。你不会跑去北

    2024年02月11日
    浏览(34)
  • [Linux打怪升级之路]-缓冲区

    前言 作者 : 小蜗牛向前冲 名言 : 我可以接受失败,但我不能接受放弃    如果觉的博主的文章还不错的话,还请 点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正  本期学习目标:认识什么是缓冲区,缓冲区在哪里,模拟实现一个简单的缓

    2024年02月07日
    浏览(35)
  • 【Linux】基础IO----理解缓冲区

    作者:დ旧言~ 座右铭:松树千年终是朽,槿花一日自为荣。 目标:理解缓冲区 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! 专栏选自:Linux初阶 望小伙伴们点赞👍收藏✨加关注哟💕💕 缓冲区大家其实不陌生,像我们使用的 VS2019 编译器这里就有缓冲区,那它

    2024年04月13日
    浏览(27)
  • 【Linux】缓冲区+磁盘+动静态库

    缓冲区的本质就是一段用作缓存的 内存 。 节省进程进行数据IO的时间。进程使用fwrite等函数把数据拷贝到缓冲区或者外设中。 3.1、 立即刷新(无缓冲)——ffush() 情况很少,比如调用printf后,手动调用fflush刷新缓冲区。 3.2、 行刷新(行缓冲)——显示器 显示器需要满足人

    2024年02月05日
    浏览(28)
  • 【Linux】基础IO —— 缓冲区深度剖析

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 目前状态:大三非科班啃C++中 🌍博客主页:张小姐的猫~江湖背景 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥真正的大师永远怀着一颗学徒的心 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉

    2024年02月02日
    浏览(37)
  • 用Linux的视角来理解缓冲区概念

    缓冲区(buffer)是存储数据的临时存储区域。当我们用C语言向文件中写入数据时,数据并不会直接的写到文件中,中途还经过了缓冲区,而我们需要对缓冲区的数据进行刷新,那么数据才算写到文件当中。而缓冲区通常是一块内存区域,可以是数组、队列、链表等数据结构。

    2024年01月20日
    浏览(32)
  • 【Linux】模拟实现FILE以及认识缓冲区

    刷新缓冲逻辑图 自定义实现 如何强制刷新内核缓冲区 根据文件描述符进行强制刷新 例子 像我们进行scanf输入的时候,其实本身我们输入的是一串字符串,将这个字符串读入对应的缓冲区buff后,然后通过分解工作,进一步传入系统,系统,系统在通过一些指令输入输出想要

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包