当前位置: 首页 > news >正文

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

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

相关文章:

  • 技术差异,应用场景;虚拟机可以当作云服务器吗
  • SambaLingo——教会大模型新语言
  • 社区服务小程序功能设计,社区服务小程序的功能有哪些?
  • NLP基础知识——文本处理、张量表示、文本数据分析
  • 支持向量机 (SVM) 算法详解
  • 测试用例编写指导
  • PHP入门教程4:文件处理和表单处理
  • SPI协议——读取外部SPI Flash ID
  • Flink 窗口触发器
  • 【OpenHarmony开发】自定义系统应用之实践
  • 示例:WPF中绑定枚举到ComboBox想显示成中文或自定义名称如何实现
  • utf8和utf8mb4的主要区别
  • OceanBase 并行执行参数 parallel_servers_target 理解
  • git提交错了?别慌,直接删除提交记录
  • 机器学习实验--- 金融数据基础与计算在线实验闯关
  • 2017年终总结、随想
  • angular2开源库收集
  • Angular6错误 Service: No provider for Renderer2
  • Linux下的乱码问题
  • PermissionScope Swift4 兼容问题
  • python3 使用 asyncio 代替线程
  • React-redux的原理以及使用
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 回顾2016
  • 基于web的全景—— Pannellum小试
  • 开源SQL-on-Hadoop系统一览
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 理解在java “”i=i++;”所发生的事情
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我是如何设计 Upload 上传组件的
  • 正则表达式小结
  • HanLP分词命名实体提取详解
  • 如何正确理解,内页权重高于首页?
  • # wps必须要登录激活才能使用吗?
  • #pragma once
  • #QT(智能家居界面-界面切换)
  • (1)(1.9) MSP (version 4.2)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (算法)前K大的和
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)认识微服务
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 未来三学期想要修的课 (日記)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)hibernate缓存
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • **CentOS7安装Maven**