Linux(ubuntu)安装libevent

2023-11-10

步骤如下

第一步下载压缩包文件  ----- libevent-2.1.8-stable.tar.gz:   地址:https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz

或者
链接:https://pan.baidu.com/s/1XdzHZfRGS45R3rvC67Puvw?pwd=wldk 
提取码:wldk 
--来自百度网盘超级会员V2的分享

|------------------------------------------------------------------------------------------------------------------------------|
第二步解压压缩包文件:   tar -zxvf libevent-2.1.8-stable.tar.gz 


第三步创建文件夹 :  mkdir   /usr/lib/libevent

第四步进入libevent-2.1.8文件夹:   cd   libevent-2.1.8-stable 

第五步配置文件:  ./configure -prefix=/usr/lib/libevent

第六步编译:  make

第七步安装:make install

第八步安装: sudo apt-get install libevent-dev
|--------------------------------------------------------------------------------------------------------------------------------|
第九步骤测试 -----创建一个demo.cpp文件---编译是否成功

//-----------------------------------代码---------------------------------------------------|
#include <event.h>
  
#include <iostream>

struct event ev;
struct timeval tv;

using namespace std;

void time_cb(int fd, short event, void *argc)
{
    cout << "timer wakeup" << endl;
    event_add(&ev, &tv);
}

int main()
{
    struct event_base *base = event_init();

    tv.tv_sec = 10;
    tv.tv_usec = 0;
    evtimer_set(&ev, time_cb, NULL);
    event_add(&ev, &tv);
    event_base_dispatch(base);

    return 0;
}
//----------------------------------------------------------------------|

编译:g++  nn.cpp -o nn -levent



#include <sys/socket.h>
#include<iostream>
#include<string>
#include <sys/types.h>
#include<event.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>						
#include <unistd.h>

#include <netinet/in.h>
#include <arpa/inet.h>	
#include<pthread.h>
#include <vector>//stl
using namespace std;
//|----------------------------线程------------------------------------|
/*
   void * printP(void* arg)
   {

// system("./start.sh");
return 0;
}

pthread_t m_pthread;
pthread_create(&m_pthread,NULL,printP,NULL);

*/


struct  khdxx
{
	char gwip[INET_ADDRSTRLEN];
	int sk;
};

class fwq
{

	private:
		int sk;//套接字描述符

		int bdkhd;//绑定ip端口返回成功与失败
		int ljtjz;//监听客户端套接字成功与失败
		int khdsk;//提取客户端套接字描述符号成公与失败
		char cli_ip[INET_ADDRSTRLEN];//客户端ip
		char cli_dk[INET_ADDRSTRLEN];//客户端口号
		khdxx aa[60];//客户端信息
		int bb;

	public:
		int socket_o(void);//获取套接字ipv4第一个是参数ipv4第二个参数是面向字节流第三个参数是零就可以了返回值为套接字描述符出错返回-1
		int bind_o( void );//绑定客户端参数为套接字描述符成功返回0失败返回-1
		int listen_o(void);//监听为客户端第一个参数为套接字描述符,第二个为等待的多少,成功返回0,失败返回-1
		int accept_o(int aa); //提取客户端
		void  duxie_o(void);//读写客户端
};




//|--------------------------------------------------------------获取套接字--------------------------------------------------|
int fwq::socket_o (void)
{

	this->bb=0;
	this->sk=socket (AF_INET,SOCK_STREAM,0);
	return this->sk;
}


//|---------------------------------------------------------------绑定客户端--------------------------------------------------|
int fwq::bind_o( void)
{

	struct sockaddr_in my_addr;
	bzero(&my_addr, sizeof(my_addr));
	unsigned short port = 8080;	// 本地端口	
	my_addr.sin_family = AF_INET;	// ipv4
	my_addr.sin_port = htons(port); // 端口
	my_addr.sin_addr.s_addr = htonl(INADDR_ANY); // ip,INADDR_ANY为通配地址其值为0
	this->bdkhd = bind(this->sk, (struct sockaddr*)&my_addr, sizeof(my_addr));


	return this->bdkhd;
}
//|------------------------------------------------------------监听客户端连接-----------------------------------------------|
int fwq::listen_o(void)
{
	this->ljtjz=listen(this->sk, 124);
	return this->ljtjz;
}
//|-----------------------------------------------------------提取客户端了解------------------------------------------------|
int fwq::accept_o(int aa)
{

	struct sockaddr_in client_addr;		   
	//char cli_ip[INET_ADDRSTRLEN] = "";	   
	socklen_t cliaddr_len = sizeof(client_addr);    
	this->khdsk=accept(aa,(struct sockaddr *)&client_addr,&cliaddr_len);
	inet_ntop(AF_INET, &client_addr.sin_addr,this-> cli_ip, INET_ADDRSTRLEN);
	inet_ntop(AF_INET, &client_addr.sin_addr,this-> aa[bb].gwip, INET_ADDRSTRLEN);
	this->aa[bb].sk=this->khdsk;		
	printf("%s\n", this->aa[bb].gwip);
	printf("%d\n",this->aa[bb].sk);
	bb++;
	//this->
	return this->khdsk;
}
//|--------------------------------------------------------------读写-------------------------------------------------------|
void fwq::duxie_o(void)
{
	int fd= this->khdsk;
	char buf[1024]="";
	read(fd,buf,sizeof(buf));
	printf("%s\n",buf);
}


fwq  hh;

int rr;

struct  jjss
{

	struct event *ev;
	int ks;

};


std::vector<jjss> myvector;//存储了上线数描述符和文件描述符的结构体数组

struct event *fhxs(int sk)//返回需要下线树的描述符
{
	
         struct event *ev;

        for (auto it = myvector.crbegin(); it != myvector.crend(); ++it)
	{
              
              if( it->ks==sk)
              {
                  ev=it->ev;
                 	  
                  break;
	      }
                
	}
      
        return ev;
}

void xiaxiang(int cfd)//下线数据吗
{
int ztys=myvector.size();

cout<<"当前数组的元素个数:"<<ztys<<endl;



for(vector<jjss>::iterator iter=myvector.begin(); iter!=myvector.end(); )
{
     if( iter->ks == cfd)
          iter = myvector.erase(iter);
      else
          iter ++ ;
}    

}
void cfdcb(int cfd,short event,void *arg)//监听客户发送消息以及下线
{
	char buf[1500]="";
	int n=read(cfd,buf,sizeof(buf));

	if(n<=0)
	{
		perror("err or clise\n");
		event_del(fhxs(cfd));//把树描述符下线
		xiaxiang(cfd);//取出结构体元素
		close(cfd);
		cout<<"描述符号->"<<cfd<<":"<<"下线了"<<endl;
               

	}
	else
	{

		cout<< cfd<<buf<<endl;
		write(cfd,buf,n);

	}
}


void lfdcb(int lfd,short event,void *arg)//监听用户上线
{

	struct event_base  *base=(struct event_base *)arg;	
	int cfd =hh.accept_o(rr);
	struct event *ev =event_new(base,cfd,EV_READ|EV_PERSIST,cfdcb,NULL);
        jjss hh;
	hh.ev=ev;
	hh.ks=cfd;
        myvector.push_back(hh);
        cout<<"描述符->"<<cfd<<":"<<"上线了"<<endl;


	event_add(ev,NULL);
}


void  tcdfwq(void)
{

	//创建cocket

	rr=hh.socket_o();
	//绑定客户端
	hh.bind_o();
	//监听客户
	hh.listen_o();
	//创建event_base节点
	struct event_base *base =event_base_new();
	//初始化上树节点
	struct event *ev =event_new(base,rr,EV_READ|EV_PERSIST,lfdcb,base);
	//上树
	event_add(ev,NULL);
	//循环监听
	event_base_dispatch(base);//阻塞
	//收尾
	close(rr);
	event_base_free(base);

}


int main(void)
{

	tcdfwq();
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux(ubuntu)安装libevent 的相关文章

  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包

随机推荐

  • golang开发的准备 - gvm(go版本管理软件)的使用

    概述 gvm软件用于go版本的管理 主要的功能为go版本的查看 下载安装和切换 一 go版本的查看 gvm listall 命令用于查看可以下载安装的go版本 shane ubuntu gvm binscripts gvm listall
  • java Map集合的使用

    Map集合的使用 Map的特点 Map接口的常用实现类 Map集合的常用方法的使用 1 添加map集合元素 2 删除map集合元素 3 替换map集合元素 4 集合中是否包含指定的key和value 5 分别获取map集合中所有的key和v
  • Python中CV2及PIL库无法安装解决方式

    ERROR Could not find a version that satisfies the requirement cv2 from versions none ERROR No matching distribution foun
  • 关于DDOS的几个误区,你知道几个?

    在竞争激烈的互联网领域 总有一些组织和个人利用DDoS攻击进行破坏 从而达到自己的目的 对于DDoS攻击 大部分人的认知来源于新闻报道 新闻报道这种方式在普及DDoS危害性的同时 也会不自觉地引入一些误区 下面小墨就带大家来看看关于DDoS
  • Git常用操作总结,经常遇到但是记不住

    今天分享一些我平时在使用git时经常会遇到的几个问题 由于命令一直记不住 每次都得去搜索贼麻烦 所以今天想着整理一下分享出来 希望能帮助到也经常遇到这些问题的你 Git remote 使用总结 使用场景 新建一个git仓库并与远程关联 初始
  • 纯css画三角形

    思路 用border实现 lt html lang en gt lt head gt lt meta charset UTF 8 gt lt meta name viewport content width device width ini
  • 数学形态学滤波学习

    一 概述 数学形态学是建立在集合论基础上了一门学科 具体在图像处理领域 它把形态学和数学中的集合论结合起来 描述二值或灰度图像中的形态特征 来达到图形处理的目的 形态学主要是通过结构元素和图像的相互作用对图像进行拓补变换从而获得图像结构信息
  • 常用的概率分布:伯努利分布、二项分布、多项式分布、高斯分布、指数分布、拉普拉斯分布和Dirac-delta分布

    伯努利分布 Bernoulli distribution 伯努利分布 单个二值随机变量的分布 由单个参数 0 1 控制 例 抛硬币 正面朝上的概率 二项式分布 binomial distrubution 二项式分布 在n次试验中事件A恰好发
  • Android AIDL示例-RemoteCallbackList添加移除监听

    前言 AIDL是一个缩写 全称是Android Interface Definition Language 也就是Android接口定义语言 它是用来实现进程间通讯的 本文使用AIDL写一个小demo来实现夸进程间通讯 本文接着这一篇文章写
  • Git管理工具对比(GitBash、EGit、SourceTree)

    Git管理工具对比 GitBash EGit SourceTree GitBash是采用命令行的方式对版本进行管理 功能最为灵活强大 但是由于需要手动输入希望修改的文件名 所以相对繁琐 EGit是Eclipse的Git插件 最为纠结的一个软
  • 小乌龟Tortoisegit官方汉化包 中文语言安装

    进入小乌龟官网的Download界面下拉在Language中选择中文语言包简体 https tortoisegit org download 下载后直接双击 一步到位安装好 不用管安装路径 在桌面右键点击Tortoisegit选择Setti
  • 如何快速建立一个优秀的账号体系

    在2014年下半年开始 只支持第三方账号登陆的应用在提交苹果的appstore审核的时候被拒绝 拒信如下 If we chose to log in with 微信 we were required toinstall 微信 before
  • org.hibernate.UnknownEntityTypeException: Unable to locate persister:

    springboot2 0 当把Application放到其他包里面时 会出现标题的异常 针对此异常的解决办法是 增加jpa的配置类 使其能扫描到所有的bean package com bmSystem common sys config
  • 微信公众平台错误代码40164的解决方案

    获取微信公众号授权失败 请稍后重试 公众平台返回原始数据为 错误代码 40164 错误信息 invalid ip not in whitelist hint 59FKqA0797e514 错误解释 调用接口的IP地址不在白名单中 请在接口I
  • 车道线检测

    3D车道线单目检测方法 ONCE 3DLanes GitHub once 3dlanes once 3dlanes benchmark 斑马线 检测 上海交大 CDNet 基于YOLOv5改进的 人行道 斑马线和汽车过线行为检测 jacke
  • 详解vue中的v-model

    序 v model是v bind和v on input的结合 即监听了表单的input事件 然后修改value属性对应的值 一 vue单文件中使用v model 众所周知 当我们使用v bind绑定prop时 数据流的流向是从model层流
  • Centos7安装Redis并设置开机自启动图文详解

    1 下载redis wget http download redis io releases redis 6 0 0 tar gz 如果提示没有wget使用如下命令 yum y install wget 2 安装 解压 tar zxvf r
  • 【ES】Elasticsearch Java Rest Client (Document APIs)官方文档中文翻译

    这里写目录标题 一 文档APIs 1 单文档 API Index API Get API Get Source API Exists API Delete API Update API Term Vectors API 2 多文档 API
  • Linux本地套接字

    LINUX和UNIX都拥有一个非常实用的工具 UNIX套接字 或称为本地套接字 它可以被用在进程间通讯 IPC 当中 UNIX套接字的运转机制和Internet套接字类似 主要的区别UNIX套接字只能用在一台计算机中 而Internet套接
  • Linux(ubuntu)安装libevent

    步骤如下 第一步下载压缩包文件 libevent 2 1 8 stable tar gz 地址 https github com libevent libevent releases download release 2 1 8 stabl