【Linux】libevent、vcpkg(linux环境变量)

0 Linux环境变量

Linux环境变量配置方法一: export PATH

export PATH=/home/uusama/mysql/bin:$PATH

# 或者把PATH放在前面
export PATH=$PATH:/home/uusama/mysql/bin
  • 生效时间:立即生效
  • 生效期限:当前终端有效,窗口关闭后无效
  • 生效范围:仅对当前用户有效
  • 配置的环境变量中不要忘了加上原来的配置,即$PATH部分,避免覆盖原来配置

Linux环境变量配置方法二: vim ~/.bashrc

vim ~/.bashrc

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
  • 生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc生效
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效
  • 如果有后续的环境变量加载文件覆盖了PATH定义,则可能不生效

Linux环境变量配置方法三: vim ~/.bash_profile

  • 生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile生效
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效
  • 如果没有.bash_profile文件,则可以编辑.profile文件或者新建一个

Linux环境变量配置方法四: vim /etc/bashrc

该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限

# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/bashrc
vim /etc/bashrc

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
  • 生效时间:新开终端生效,或者手动source /etc/bashrc生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效

Linux环境变量配置方法五: vim /etc/profile

# 如果/etc/profile文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/profile
vim /etc/profile

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
  • 生效时间:新开终端生效,或者手动source /etc/profile生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效

Linux环境变量配置方法六: vim /etc/environment

# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/environment

vim /etc/profile

# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
  • 生效时间:新开终端生效,或者手动source /etc/environment生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效

1 libevent 简介

简介
Libevent是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:

事件驱动( event-driven),高性能轻量级,专注于网络,不如ACE那么臃肿庞大:源代码相当精炼、易读:跨平台,支持 Windows、 Linux、BSD和 Mac Os:支持多种IO多路复用技术, epoll, poll、 dev/poll, select和 kqueue等。支持I/O,定时器和信号等事件、注册事件优先级。

Chromium、Memcached、NTP、HTTPSQS等著名的开源程序都使用libevent库。

libevent核心
Reactor(反应堆)模式是 libevent的核心框架, libevent以事件驱动,自动触发回调功能。

2 libevent (vcpkg)安装

git https://github.com/libevent/libevent.git
2.1 安装vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install

提示下面的信息(后面放在CMakeLists中,CMAKE_TOOLCHAIN_FILE用于获取到安装库的路径)

-CMAKE_TOOLCHAIN_FILE=/home/xhh/Downloads/app/vcpkg/scripts/buildsystems/vcpkg.cmake
2.2 安装libevent
./vcpkg install libevent

提示下面的信息(后面放在CMakeLists中用)

find_package(Libevent CONFIG REQUIRED)
target_link_libraries(main PRIVATE libevent::core libevent::extra libevent::pthreads)
2.3 测试libevent
#include <event.h>
#include <stdio.h>

int main(){
   
    const char **methods = event_get_supported_methods();
    for(int i = 0; methods[i] != nullptr; ++i){
   
        printf("%s is support .\n", methods[i]);
    }
    struct event_base *base = event_base_new();
    printf("curr os supprot [%s] \n", event_base_get_method(base));
    return 0;
}
2.4 编写CMakeLists.txt

V1版本

cmake_minimum_required(VERSION 2.8)

# [2.1] vcpkg.camke---> setting vcpkg path [NICE!]
set(CMAKE_TOOLCHAIN_FILE /home/xhh/Downloads/app/vcpkg/scripts/buildsystems/vcpkg.cmake)

project(TESTPOOL)
add_compile_options(-std=c++11)       # C++11
set(CMAKE_BUILD_TYPE "DEBUG")         # debug mode

# [2.2] 找event包
find_package(Libevent CONFIG REQUIRED)

add_executable(main main.cpp)
# [2.2] 找event的库   -levent
target_link_libraries(main PRIVATE libevent::core libevent::extra libevent::pthreads)   

V2版本-利用${}

cmake_minimum_required(VERSION 2.8)
# setting vcpkg path [NICE!]
set(CMAKE_TOOLCHAIN_FILE "/home/xhh/Downloads/app/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")

project(TESTPOOL)
add_compile_options(-std=c++11)       # C++11
set(CMAKE_BUILD_TYPE "DEBUG")         # debug mode

find_package(Libevent CONFIG REQUIRED)

add_executable(${
   PROJECT_NAME} main.cpp)
# -levent
target_link_libraries(${
   PROJECT_NAME} PRIVATE libevent::core libevent::extra libevent::pthreads)   

V3版本-把vcpkg.cmake添加至系统变量

  • 添加系统变量
vim ~/.bashrc
export VCPKG="/home/xhh/Downloads/app/vcpkg/scripts/buildsystems/vcpkg.cmake"
vim ~/.bashrc
export VCPKGHOME="/home/xhh/Downloads/app/vcpkg"
  • 使用系统变量地址
# 修改这一行 "$ENV{VCPKG}" 获取环境变量中设置的VCPKG
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG}" CACHE STRING "Vcpkg toolchain file")

2.5 Clion中使用vcpkg(PASS)

2.6 VsCode中使用vcpkg

【Linux】Vscode & CMake实战开发:用于配置Vscode

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
# setting vcpkg path [NICE!]
# set(CMAKE_TOOLCHAIN_FILE "/home/xhh/Downloads/app/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
// set(CMAKE_TOOLCHAIN_FILE $ENV{VCPKG} CACHE STRING "Vcpkg toolchain file")
set(CMAKE_TOOLCHAIN_FILE $ENV{
   VCPKGHOME}/scripts/buildsystems/vcpkg.cmake CACHE STRING "Vcpkg toolchain file")


project(MAINCXX)
add_compile_options(-std=c++11)       # C++11
set(CMAKE_BUILD_TYPE "DEBUG")           # debug mode

find_package(Libevent CONFIG REQUIRED)
add_executable(${
   PROJECT_NAME} main.cpp)
# -levent
target_link_libraries(${
   PROJECT_NAME} PRIVATE libevent::core libevent::extra libevent::pthreads)   

c_cpp_properties.json

用于包含vcpkg的第三方头文件include(声明,no定义)

{
   
    "configurations": [
        {
   
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                // [xhh] add vcpkg all lib-include
                // "/home/xhh/Downloads/app/vcpkg/installed/x64-linux/include",
                "${VCPKGHOME}/installed/x64-linux/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

settings.json

包含编译链工具 CMAKE_TOOLCHAIN_FILE

{
   
    "files.associations": {
   
        "iostream": "cpp"
    },
    // [xhh] add cmake 
    "cmake.configureSettings": {
   
        // "CMAKE_TOOLCHAIN_FILE": "/home/xhh/Downloads/app/vcpkg/scripts/buildsystems/vcpkg.cmake",
        "CMAKE_TOOLCHAIN_FILE": "${VCPKGHOME}/scripts/buildsystems/vcpkg.cmake"
    }
}

3 libevent 使用

在这里插入图片描述

3.1 基本API

对于不同系统而言, event_ base就是调用不同的多路IO接口去判断事件是否已经被激活。
核心调用的就是epoll,同时支持poll和 select。

  • 创建与销毁(父根)
// [1] create
struct event_base *event_base_new(void); 
// [2] free
void event_base_free(struct event_base *base);
  • 等待事件
// 循环监听,封装epoll_wait
int event_base_dispatch(struct event_base *base);
  • 退出监听
// 退出循环监听
int event_base_loopexit(struct event_base *base, const struct timeval *timeout);
int event_base_loopbreak(struct event_base *base);
  • 初始化节点
// 根节点 上树文件描述符fd  监听事件  回调函数cb  回调函数参数
struct event *event_new(struct event_base *base, evutil_socket_t fd, short events, event_callback_fn cb, void *arg);


// events
#define EV_TIMEOUT	0x01
#define EV_READ		0x02
#define EV_WRITE	0x04
#define EV_SIGNAL	0x08
#define EV_PERSIST	0x10	// 设置循环监听(默认一次)
#define EV_ET		0x20

// cb
typedef void (*event_callback_fn)(evutil_socket_t fd, short, void *arg);
  • 添加节点
int event_add
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值