【Linux】工具:Bundle 库的安装和简单使用

文章目录

      • 1. 下载 buddle 库
      • 2. 从 Win 传输文件到 Linux
      • 3. 解压缩
  • Bundle 库
    • 压缩
    • 解压缩

1. 下载 buddle 库

要求联网,笔者使用云服务器,在 Xshell 7 上完成的虚拟机操作。

  • 安装 git 工具,通过代码 clone
    (大概率连接不上,推荐直接浏览器下载)
sudo yum install -y git
git clone https://github.com/r-lyeh-archived/bundle.git
  • 访问链接下载压缩包

Github 链接
在这里插入图片描述

2. 从 Win 传输文件到 Linux

  • 下载文件传输工具
sudo yum install -y lrzsz
  • 笔者使用 Xshell7,可以将下载好的两个压缩包直接拖拽到 Xshell 界面后接收。也可以手下下面代码,在弹窗中选择两个压缩包文件进行传输。
rz -E

3. 解压缩

  • 安装解压缩工具
sudo yum install -y unzip
  • 对文件解压缩
unzip bundle-master.zip 

Bundle 库


Bundle 是一个嵌入式压缩库,支持 23 种压缩算法和 2 种存档格式。使用的时候只需要加入两个文件 bundle.hbundle.cpp 即可(这里代码根据个人文件位置进行编写)

cp [xxx/bundle.h] .
cp [xxx/bundle.cpp] .

压缩

container pack<container>(unsigned int q, const container &input) 

参数 q:

  • 选项,bundle::XXX 定义了一些宏名称,对应不同的压缩算法
  • 正常选择 bundle::LZIP 即可

参数 input:

  • 存放的是需要压缩的数据

返回值:

  • 返回压缩后的数据,选用一个容器进行保存,可以用 std::string

完成一个可执行程序,让我们可以用 bash 来进行文件压缩:
makefile:

# 压缩
compress:compress.cpp bundle.cpp
	g++ -o $@ $^ -lpthread	# bundle.cpp 里面用到线程,所以这里也要链接线程库

.PHONY:clean
clean:
	rm -f compress

主程序部分:

#include 
#include 
#include 
#include "bundle.h"

int main(int argc, char *argv[])
{
    if (argc < 3)
    {
        std::cout << "argv[1] 是原始文件路径名称" << std::endl;
        std::cout << "argv[2] 是压缩包名称" << std::endl;
        return -1;
    }

    std::string ifilename = argv[1];
    std::string ofilename = argv[2];

	// 1
    // 将原始文件内容读取到 body 中
    std::ifstream ifs;
    ifs.open(ifilename, std::ios::binary); // 二进制打开文件
    ifs.seekg(0, std::ios::end);           // 跳到文件末尾
    size_t fsize = ifs.tellg();            // 末尾相较于起始位置的偏移量(文件大小)
    ifs.seekg(0, std::ios::beg);           // 回到文件开头
    std::string body;

    body.resize(fsize);
    ifs.read(&body[0], fsize);

	// 2
    // 选择压缩方法 lzip,将 body 中的数据压缩保存到 packed
    std::string packed = bundle::pack(bundle::LZIP, body);

	// 3
    // 将压缩后的结果 packed,写入压缩文件中
    std::ofstream ofs;
    ofs.open(ofilename, std::ios::binary);
    ofs.write(&packed[0], packed.size());

    ifs.close();
    ofs.close();
    return 0;
}

解压缩

T1 unpack<T1>(const T1 &input)

参数 input:

  • 存放的是需要解压缩的数据

返回值:

  • 返回解压缩后的数据,选用一个容器进行保存,可以用 std::string

完成一个可执行程序,让我们可以用 bash 来进行压缩文件解压缩:
makefile:

# 解压缩
uncompress:uncompress.cpp bundle.cpp
	g++ -o $@ $^ -lpthread	# bundle.cpp 里面用到线程,所以这里也要链接线程库

.PHONY:clean
clean:
	rm -f uncompress
#include 
#include 
#include 
#include "bundle.h"

int main(int argc, char *argv[])
{
    if (argc < 3)
    {
        std::cout << "argv[1] 是压缩包名称" << std::endl;
        std::cout << "argv[2] 是解压后的文件名称" << std::endl;
        return -1;
    }
    std::string ifilenname = argv[1]; // 压缩包名
    std::string ofilenname = argv[2]; // 解压缩文件名
	
	// 1
    // 二进制方式打开压缩文件,并将内容读取到 body 中
    std::ifstream ifs;
    ifs.open(ifilenname, std::ios::binary);
    ifs.seekg(0, std::ios::end);
    size_t fsz = ifs.tellg();
    ifs.seekg(0, std::ios::beg);
    std::string body;
    body.resize(fsz);
    ifs.read(&body[0], fsz);
    ifs.close();

	// 2
    // bundle::unpack 对 body 进行解压,解压后的内容存入 unpacked
    std::string unpacked = bundle::unpack(body);

	// 3
    // 将 unpacked 的内容写入文件中
    std::ofstream ofs;
    ofs.open(ofilenname, std::ios::binary);
    ofs.write(unpacked.c_str(), unpacked.size());
    ofs.close();

    return 0;
}

如果本文对你有些帮助,请给个赞或收藏,你的支持是对作者大大莫大的鼓励!!(✿◡‿◡) 欢迎评论留言~~


你可能感兴趣的:(Linux,linux,运维,服务器)