libevent(9)通过libevent实时监听文件的更新

news2024/11/16 19:29:21

这里我们利用libevent监听centos系统上的login日志文件,文件路径:/var/log/secure。(ubuntu下是"/var/log/auth.log")

代码如下 test_file.cpp:


#include <iostream>
#include <thread>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <event2/event.h>
#include <event2/listener.h>
#include <event2/thread.h>

#define SPORT 5001

using namespace std;

void read_file(evutil_socket_t fd, short which, void* arg){
    char buf[1024] = {0};
	int len = read(fd, buf, sizeof(buf) - 1);
	if(len > 0){
        cout<<buf<<endl;
	}else{
	    cout<<"."<<flush;
		this_thread::sleep_for(chrono::seconds(1));
	}
}

int main()
{
#ifdef _WIN32
    //windows初始化socket库
    WSADATA wsa;
    WSAStartup(MAKEWORD(2, 2), &wsa);
#else
    //发送数据给已关闭socket时,忽略管道信息.
    //否则可能导致程序dump.
    if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
        return -1;
    }
#endif
    event_config* conf = event_config_new();
	//设置文件描述符
	event_config_require_features(conf, EV_FEATURE_FDS);
    event_base* base = event_base_new_with_config(conf);
	event_config_free(conf);
	if(!base){
	    cerr<<"event_base_new_with_config failed!"<<endl;
		return -1;
	}

	//ubuntu下打开"/var/log/auth.log"
    int sock = open("/var/log/secure", O_RDONLY|O_NONBLOCK, 0);
	if(sock <= 0){
	    cerr<<"open /var/log/secure failed!"<<endl;
		return -2;
	}
	
	//文件指针移到结尾处
	lseek(sock, 0, SEEK_END);
	
	//监听文件数据
	event* fev = event_new(base, sock, EV_READ|EV_PERSIST, read_file, 0);
	event_add(fev, NULL);
    
	std::cout<<"............."<<std::endl;
    event_base_dispatch(base);
    event_base_free(base);

#ifdef _WIN32
    //清理window的socket库
    WSACleanup();
#endif

    return 0;
}

在centos下的执行结果如下:

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

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

相关文章

数据迁移ETL工具分享

1.概述 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 我汇总了一些目前市面上比较常用的ETL数据迁移工具&#xff0c;希望对你会有所帮助。 2. …

华为OD机试真题 Java 实现【核酸检测人员安排】【2023Q1 100分】

一、题目描述 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同&#xff0c;采样效率为N人/小时。 由于外界变化&#xff0c;采样员的效率会以M人/小时为粒度发生变化&#xff0c;M为采样效率浮动粒度&#xff0c;M N * 10…

云数据库是未来趋势,亚马逊云科技位居Gartner报告“领导者”

最近,数据库领域发生了一个大事件,可以称得上是一座里程碑。全球最具权威的IT研究公司Gartner最近发布了一个消息:在2022年的全球DBMS市场份额中,亚马逊云科技的数据库超越微软,登顶第一。 亚马逊云科技、微软、Oracle这三巨头近几年一直排名前三,占据了全球DBMS超过三分之二的…

无法提取请求的数据。有关详细信息,请查看 vSphere Client 日志。vsan没法查询详细信息

解释&#xff1a; 根本原因是证书不一致&#xff0c;但是vc的证书和vsan他们不共用一个证书&#xff0c;所以需要保证集群证书的统一&#xff0c; &#xff0c;当时由于vc的证书到期后&#xff0c;只替换了vc的sts证书&#xff0c;在替换了STS证书之后&#xff0c;可能会导致…

LangChain 构建本地知识库问答应用

一、使用本地知识库构建问答应用 上篇文章基于 LangChain 的Prompts 提示管理构建特定领域模型&#xff0c;如果看过应该可以感觉出来 ChatGPT 还是非常强大的&#xff0c;但是对于一些特有领域的内容让 GPT 回答的话还是有些吃力的&#xff0c;比如让 ChatGPT 介绍下什么是 L…

地下水数值模拟软件有哪些??GMS、Visual MODFLOW Flex、FEFLOW、MODFLOW

目录 ①全流程GMS地下水数值模拟技能培养及溶质运移反应问题深度解析 ②Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析 ③全流程各工程类型地下水环境影响评价【一级】方法与MODFLOW Flex建模 ④地下水热耦合模拟FEFLO…

亚马逊云科技通过“逆向工作法”,为客户解决数据库问题

最近,数据库领域发生了一个大事件,可以称得上是一座里程碑。全球最具权威的IT研究公司Gartner最近发布了一个消息:在2022年的全球DBMS市场份额中,亚马逊云科技的数据库超越微软,登顶第一。 亚马逊云科技、微软、Oracle这三巨头近几年一直排名前三,占据了全球DBMS超过三分之二的…

8.7 实现TCP通讯

目录 socket函数 与 通信域 套接字类型与协议 bind函数 与 通信结构体 domain通信地址族 与 通信结构体 IPv4地址族结构体 通用地址族结构体 示例&#xff1a;为套接字fd绑定通信结构体addr listen函数 与 accept函数 socket函数 与 通信域 #include <sys/types.h&g…

网络初识知识小结

目录 IP地址 端口号 协议 协议分层 TCP/IP 五层模型 传输过程 接收过程 IP地址 IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址 换句话说 IP是网络中主机的身份证,可以通过IP地址定位该主机在网络中的地址 端口号 在网络通信中…

子项目中程序报:java.lang.NoClassDefFoundError

1.项目结构 NoClassDefFoundError 的 java类是在父项目中导入的 &#xff0c;子项目继承了父项目&#xff0c;在子项目中新建的main 程序中使用了该java类 大家可以看下scope 是否是 provided&#xff0c;大家选上下图的设置就可以了&#xff0c;不同版本idea 可能有差距然后重…

中移链链账户、合约与资源关系介绍

中移链链账户是在中移链区块链上注册的用户标识&#xff0c;每个账户可以持有一定数量的资源。CPU资源是账户用于执行智能合约的计算能力配额&#xff0c;决定了账户可以使用的CPU计算时间。NET资源是账户的带宽配额&#xff0c;用于处理事务的传输和网络通信。RAM资源用于存储…

【SSO】单点登录方案

一、单点登录问题 由于Http请求是无状态的请求&#xff0c;服务器无法确认登录信息。当用户登录时&#xff0c;将用户信息存储到Session中&#xff0c;Session将认证的用户信息以Cookie方式返回给客户端。每次用户请求不同的业务系统&#xff0c;都会携带Cookie去请求。保证了…

CloudCompare

零、安装 软件包直接安装 帮助文档&#xff1a;http://www.cloudcompare.org/doc 官网&#xff1a;http://www.danielgm.net/cc/ 一、操作&#xff1a;分割、删除点 1、打开文件File–>Open 支持的格式&#xff1a; 2、旋转和移动点云 鼠标左键可以旋转、右键可以移动 定轴…

Yolov8改进---注意力机制:ICASSP2023 EMA基于跨空间学习的高效多尺度注意力、效果优于ECA、CBAM、CA | 小目标涨点明显

1.EMA介绍 论文:https://arxiv.org/abs/2305.13563v1 录用:ICASSP2023 通过通道降维来建模跨通道关系可能会给提取深度视觉表示带来副作用。本文提出了一种新的高效的多尺度注意力(EMA)模块。以保留每个通道上的信息和降低计算开销为目标,将部分通道重塑为批量维度,并将…

【Linux】ubuntu20.04上使用xrdp控制输入密码之后一直停顿不动,进不去桌面环境

一、问题背景 如下图所示&#xff0c;每次登录桌面一段时间&#xff0c;就会因为自动锁定机制而锁定账户。 重新去激活账户时&#xff0c;输入正确的密码&#xff0c;回车确定&#xff0c;之后就停留在上面那个界面了。 二、 解决方案 2.1 重启xrdp服务 这个方法&#xff…

支付宝沙箱支付详细教程(IDEA版)—2023最新版

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;专栏系列&#xff1a;无 &#x1f33c…

leetcode数据库题第七弹

leetcode数据库题第七弹 1581. 进店却未进行过交易的顾客1587. 银行账户概要 II1633. 各赛事的用户注册率1661. 每台机器的进程平均运行时间1667. 修复表中的名字1683. 无效的推文1693. 每天的领导和合伙人1729. 求关注者的数量1731. 每位经理的下属员工数量1741. 查找每个员工…

软件性能测试流程指南

1 编写目的 规范Performance Tesing性能测试过程中的活动&#xff0c;明确测试活动流程和过程中各组织、角色的职责&#xff1b;使性能测试工作有章可循&#xff0c;控制测试活动按照计划有效的进行&#xff0c;用于指导性能测试项目的实施&#xff0c;从流程和规范性上保证测…

详细讲解~接口测试实践

目录 前言&#xff1a; 接口测试 为什么介绍接口测试&#xff1f; 模块接口测试 web接口测试 前言&#xff1a; 接口测试是软件测试中的重要环节&#xff0c;它涉及对系统的API&#xff08;Application Programming Int…

中间件解析漏洞

服务器解析漏洞算是历史比较悠久了&#xff0c;但如今依然广泛存在。在此记录汇总一些常见服务器&#xff08;WEB server&#xff09;的解析漏洞&#xff0c;比如IIS6.0、IIS7.5、apache、nginx等 2|0 二、IIS5.x-6.x解析漏洞&#xff08;针对asa/asp/cer&#xff09; 2|11、打…