面试笔试--通用事件处理框架编写一个日志缓存插件

1.编程题(40分钟, 写磁盘文件、从磁盘加较数据等底层接口函数可以不用写实现细节, 重点是工程完整性)

请为一个通用事件处理框架编写一个日志缓存插件, 插件功能及要求如下

(1)插件编译成 loopfile. so, 通用插件框架的共享库为 modules_ std. so

(2)在 loopfile插件中, 实现日志缓存功能, 缓存事件 event 中的 s_ip , s_mac, s_user 三个字段(均为字符串类型), 其中s_ip为key

(3) 缓存策略为: 插件每收到一个 event, 就要先查看一下缓存中是否已经有了该事件、如果没有就添加, 否则更新一下缓存中的s_mac, s_user字段: 每隔30秒 , 需要将缓存中的事件“落地” , 写入 /var/ log/ loopfile.log 中; 插件加载时, 要先从文件中加载旧数据。

(4)请写出插件的主要源文件 loopfile. c、 loopfile. h、 Makefile( 或 Makefile, arm) 插件中至少要包括以下三个接口

/**********************
function: module_init,  插件初始化时调用一次。  
@param private:插件私有数据,  可以在init中进行分配, exit中释放
**************************/
int module_init(void ** private);/*************************
@ function; module_exit,   插件卸载时调用一次
@ param private: 插件私有数据, 这里需要释放
******************/
int module_exit(void ** private);/***********************
@ function: module_ process,   插件中的事件处理函数,  每个事件都会调用一次
@Param private:  插件私有数据, process中可以读取
@ param event   事件, 是一个KV结构的fmap类型,  key为字符串 , value可以为int、char、list等基本类型
**************************/
int module_process(void *private, fmap * event);

附录: fmap 定义在通用库 module_std.so中, 其中一些参考接口如下


/**************************
@ function:获取str值
@Param map :  要获取的map对象
@Param  kbuf: key值
Param  ksize :key长度
@reurn:成功返回值,  失败返回NULL
*************************/
const unsigned char * fmap_get_str(Fmap * map, const void * kbuf , int size);/************************
function 添加一个字符串项, 会覆盖旧数据
param map要添加的map对象
param kbuft key值长
appara vhuf  要添加的数据
reun:成功返回0.  失败返回-1
**************************/
int fmap_put_str(Fmap * map, const void * kbuf, int ksize, unsigned char * vbut, int vsizel);/****************@ function:  获取int值, 会覆盖旧数据
param map:  要获取的map对象
param kbut:  key值
param ksize: key长度
@ param find  标识是否找到  1:找到,  0:未找到o
reurn:成功返回值, 失败返回0
*************************/
u_int32_t fmap_get_int(Fmap * map, const void kbuf, int ksize, int *find);/*******************
@ Function:  从一个map获取一个整数
@ param nap:  要操作的map对象
@ param kbuf: key值
param ksize:  key长度
@ param find:  获取成功后为1, 否则为0
@ Return:  要获取的整数
*************/
int fmap_put_int(Fmap * map, const void * kbuf, int ksize, u_int32_t num);/*************
@ function: 添加一个整数到map里面@ param map:  要添加的map对象param kbuf: key值
@ param size: key长度
@ param num:  添加的整数
@ 0: 成功  -1: 失败
***************/
void * fmap_dump(fmap * map, int * msize );/*************@ function:加载一个map对象param data: 要加载的数据@ param len: data的长度
@ return: 返回解析后的map对象
*************/
fmap *fmap_load(void * data, int *len);/************
② function:  建立新的Fmap对象
@ return:成功返回Fmap对象,   失败返回NULL;
***********/
fmap * fmap_new();
/*******
@ function:释放Fmap对象/
*************/
void fmap_del(Fmap * map);
struct fmap
{};
struct fmap event;int module_init(void ** private)
{}int module_exit(void ** private)
{}int module_process(void *private, fmap * event)
{}

gcc-linux - c loopfile. c、 loopfile. h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 安装两则踩坑

mysql 安装两则踩坑 mysql 安装两则踩坑第一个坑第二个坑 mysql 安装两则踩坑 给我整吐了 第一个坑 Packet for query is too large (7632997 > 4194304). You can change this value on the server by setting the max_allowed_packet’ variable. 这里其实要看一下是不…

在哪可以查到全网的司法诉讼信息?

司法涉诉信息指的是再司法活动中形成的各种记录和资料,涵盖了诉讼案件的立案,审判,执行等各个环节的记录和文件。比如基本案件信息,开庭信息,审判信息,执行信息等。有时候还会涉及到被执行人,司…

【INTEL(ALTERA)】Nios® II EDS 是否在 Windows 10 上受支持?

目录 说明 解决方法 说明 在 readme.txt 中提到 Windows 10 不支持Nios II EDS 标准版。/content/dam/support/us/en/programmable/kdb/others/download/os-support/readme-qp171.txt 但是,在Nios II版本中,它得到了支持。https://www.altera.com/pro…

chain的不同调用方法

1、run方法 run方法是基本方法,返回为字符串格式。0.2.0后舍弃 context "袜子" chain LLMChain(promptprompt, llmmodel) # 下面三种方式等价 llm_output chain.run(context) llm_output chain.run({context: context}) llm_output chain.run(cont…

HJ39判断两个IP是否属于同一子网(下)

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 接上文&#xff1a;HJ39判断两个IP是否属于同一子网(中) 先全部获取完输入再处理数据 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool isTargetSonNet(int array…

【postgresql初级使用】触发器的enable与disable,可以自动化精准管理触发器,避免重写触发器复杂逻辑

触发器的enable与disable ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录…

小白如何重装系统win10?电脑一键重装系统傻瓜式操作!超详细步骤!

随着电脑的广泛应用&#xff0c;给笔记本/台式电脑系统重装已成为一项基本技能。对于电脑新手而言&#xff0c;如何重装Win10系统&#xff0c;或者更高版本的Win11系统可能是一个巨大的挑战。如果对电脑重装系统刚好有需要了解的小伙伴&#xff0c;不妨看看下面的干货分享。本文…

MySQL版本发布模型

MySQL 8.0 之后使用了新的版本控制和发布模型&#xff0c;分为两个主线&#xff1a;长期支持版&#xff08;LTS&#xff09;以及创新版。这两种版本都包含了缺陷修复和安全修复&#xff0c;都可以用于生产环境。 下图是 MySQL 的版本发布计划&#xff1a; 长期支持版 MySQL…

数据预处理与特征工程、过拟合与欠拟合

数据预处理与特征工程 常用的数据预处理步骤 向量化&#xff1a;将数据转换成pytorch张量值归一化&#xff1a;将特定特征的数据表示成均值为0&#xff0c;标准差为1的数据的过程&#xff1b;取较小的值&#xff1a;通常在0和1之间&#xff1b;相同值域处理缺失值特征工程&am…

java 线程之间通信-volatile 和 synchronized

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

“代码输出”

日文&#xff1a; コード出力 假名&#xff1a; コードしゅつりょく (kōdo shutsuryoku) コード (kōdo) - 代码出力 (しゅつりょく, shutsuryoku) - 输出 汉语&#xff1a; “代码输出”

欢度盛夏,畅享清凉——七月超市营销策略

随着七月的到来&#xff0c;我国大部分地区进入夏季&#xff0c;气温逐渐攀升&#xff0c;消费者们对清凉、消暑产品的需求也随之增长。在这个夏日&#xff0c;超市应该如何抓住这一商机&#xff0c;提升销售业绩呢&#xff1f;本文将从商品陈列、促销活动等方面&#xff0c;为…

MySQL-创建表~数据类型

070-创建表 create table t_user(no int,name varchar(20),gender char(1) default 男);071-插入数据 语法格式&#xff1a; insert into 表名(字段名1, 字段名2, 字段名3,......) values (值1,值2,值3,......);insert into t_user(no, name, gender) values(1, Cupid, 男);字…

OpenCV中的圆形标靶检测——findCirclesGrid()(三)

前面说到cv::findCirclesGrid2()内部先使用SimpleBlobDetector进行圆斑检测,然后使用CirclesGridClusterFinder算法类执行基于层次聚类的标靶检测。如下图所示,由于噪声的影响,SimpleBlobDetector检出的标靶可能包含噪声。 而CirclesGridClusterFinder算法类会执行基…

资源宝库网站!人人必备的神器!

面对网络中海量的内容&#xff0c;一个高效、便捷的网络导航工具&#xff0c;可以帮助我们快速查找使用网络资源。无论是职场精英还是学生党&#xff0c;使用导航网站都可以帮助我们提升效率。下面小编就来和大家分享一款资源宝库网站-办公人导航-实用的办公生活导航网站&#…

计算机网络:运输层 - TCP 流量控制 拥塞控制

计算机网络&#xff1a;运输层 - TCP 流量控制 & 拥塞控制 滑动窗口流量控制拥塞控制慢开始算法拥塞避免算法快重传算法快恢复算法 滑动窗口 如图所示&#xff1a; 在TCP首部中有一个窗口字段&#xff0c;该字段就基于滑动窗口来辅助流量控制和拥塞控制。所以我们先讲解滑…

实验室数字化转型:青软青之LIMS系统助力提升检测效率与数据管理

随着检测需求的日益增长和业务的不断扩展&#xff0c;实验室中工作量急剧上升。从而带来了不少挑战&#xff1a; 实验室中的人员、设备管理混乱&#xff0c;部门协作困难&#xff1b;实验数据分析和存储难以协同管理&#xff0c;容易造成错漏&#xff0c;导致数据准确性难以保…

MATLAB 在大规模数据分析和处理中的性能优化策略有哪些?

MATLAB在大规模数据分析和处理中具有一些性能优化策略&#xff0c;其中包括以下几个方面&#xff1a; 1.矢量化向量化操作&#xff1a;使用矢量化向量化操作能够同时处理多个数据点&#xff0c;减少循环的数量&#xff0c;提高程序的效率。 2.使用函数和内置函数&#xff1a;…

xcode报错合集,你都遇到过哪些跳不过的坑

1.报错Consecutive declarations on a line must be separated by ; 其实我这里是用因为创建了一个结构体&#xff0c;然后在没有使用State的情况下&#xff0c;修改它的属性了 当然加上State依然报错&#xff1a; 应该在UI事件中修改&#xff1a;

特种设备高处安装维护拆除作业精选历年试题

高处安装、维护、拆除作业人员资格考试题库[含答案] 单选题 1.大型运动设施拆除工程开工前,根据工程特点、设备、设施情况、工程量等编制( )。 A、安全专项方案 B、安全交底 C、拆除预算 正确答案:A 2.“卡缸”是因为压缩机润滑油( )了的情况下才会出现的现象。 A、多 …