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 的相关文章

  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • 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