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

news2024/11/18 13:20:42

文章目录

      • 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 <iostream>
#include <string>
#include <fstream>
#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 <iostream>
#include <string>
#include <fstream>
#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;
}

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


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

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

相关文章

CVE-2021-4034 polkit提权漏洞复现

CVE-2021-4034 polkit提权漏洞复现 1.前期准备2.复现 1.前期准备 Github地址&#xff1a; https://github.com/berdav/CVE-2021-4034polkit是一个授权管理器&#xff0c;其系统架构由授权和身份验证代理组成&#xff0c;pkexec是其中polkit的其中一个工具&#xff0c;他的作用…

UML简介

UML&#xff0c;全称为Unified Modeling Language&#xff08;统一建模语言&#xff09;&#xff0c;是一种用于软件工程和系统设计的标准化建模语言。它提供了一套图形化的符号和标记&#xff0c;用于描述和表示软件系统、系统架构、流程、数据结构、行为和交互。UML的设计旨在…

docker安装wiki

1.docker pull mediawiki 2.docker run -d --name mywiki -p 8666:80 mediawiki 访问ip:8666,就可以看到配置页面了 3.docker pull mysql docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 mysql 4.在配置页面链接ip:3307,连接数据库&#xff0c;接下…

Excel 快速填充

文章目录 利用快速填充进行提取数据利用快速填充进行拆分重组 2013 及以上版本才有的功能. 利用快速填充进行提取数据 有一列的数据已有, 需要提取部分数据到另一列, 只需要输入部分内容, 后面内容可以自动显示, 按下回车即可快速填充. 只要前面手动输入的内容没有错得太离谱…

迅为龙芯开发板开发板系统烧写-启动系统

上面所有的步骤我们都做完以后&#xff0c;输入命令 sync 确保我们之前的步骤都可以保存到 ssd&#xff0c;接着拔下 U盘&#xff0c;最后输入命令 reboot 重启开发板&#xff0c;如下图所示&#xff1a; 如果启动成功&#xff0c;我们会看到 pmon 从硬盘加载 linux 内核和文件…

视频怎么压缩?这样做视频变小还清晰

在我们的日常生活和工作中&#xff0c;视频已经成为了不可或缺的一部分。然而&#xff0c;随着视频文件的增大&#xff0c;如何有效地压缩视频以方便存储和传输成了一个重要的问题&#xff0c;如果你还不知道怎么压缩视频大小&#xff0c;不妨试试下面的方法吧~ 方法一&#xf…

1.3 Linux目录操作

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;常用权限操作1、常用权限操作&#xff08;1&#xff09;chgrp命令&#xff08;2&#xff09;chown命令&#xff08;3&#xff09;chmod命令 2、权限操作实战任务1、创建文件&#xff0c;设置其用户组任…

【C++设计模式之亨元模式:结构型】分析及示例

简介 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在通过共享对象&#xff0c;有效地支持大量细粒度的对象&#xff0c;从而减少内存和性能消耗。它通过将对象分为可共享的内部状态和不可共享的外部状态&#xff0c;从而实现对象共享…

AMEYA360分析:纳芯微推出超低功耗TMR开关/锁存器 NSM105x系列

纳芯微推出基于隧道磁阻 (TMR) 的超低功耗磁开关/锁存器NSM105x系列&#xff0c;为数字位置检测提供高精度的解决方案&#xff0c;可被广泛应用于工业与消费领域的位置检测。 NSM105x产品系列包含了3个产品型号&#xff0c;即NSM1051(单极开关)、NSM1052(全极开关)、NSM1053(锁…

四种常见软件架构简介

文章目录 一、单体架构二、分布式应用三、微服务架构四、Serverless架构五、总结 如果一个软件开发人员&#xff0c;不了解软件架构的演进&#xff0c;会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点&#xff0c;希望能够帮…

uniapp 显示icon异常

按照文档创建的uni-ui项目&#xff0c;仿照示例程序写的代码中icon显示异常 &#xe470; 异常情况&#xff1a; 正常情况&#xff1a; 通过比对代码发现&#xff0c;示例程序的App.vue中 有一个引用是问题的关键 正是因为多了这一个引用文件&#xff0c;图表的显示才能正常 …

在Linux怎么用vim实现把一个文件里面的文本复制到另一个文件里面

2023年10月9日&#xff0c;周一下午 我昨天遇到了这个问题&#xff0c;但在网上没找到图文并茂的博客&#xff0c;于是我自己摸索出解决办法后&#xff0c;决定写一篇图文并茂的博客。 情景 假设现在我要用vim把file_transfer.cpp的内容复制到file_transfer.hpp里面 第一步 …

网络安全(黑客)小白学习笔记

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

linux centos出现No space left on device解决方案

问题是因为系统磁盘空间不足 解决方法: 找到那个磁盘不足问题 df -lh 发现/dev/mapper/cl-root磁盘已用50G,有如下 解决方案&#xff1a; 1、如果是虚拟机可以通过分配空间使其空间增加 2、将其他不常用磁盘空间分配给cl-root如&#xff08; /dev/mapper/cl-home &#…

路径总和 III

题目链接 路径总和 III 题目描述 注意点 二叉树的节点个数的范围是 [0,1000]求该二叉树里节点值之和等于 targetSum 的 路径 的数目 解答思路 可根据前缀和的思路解决本题&#xff0c;前缀和表示从根节点开始&#xff0c;往左或往右组成的路径和&#xff0c;统计从根节点开…

windows下在cmd和git bash中执行bash download.sh失败

cmd报错信息&#xff1a; 解决办法&#xff1a; win64-wget-1.21.4 安装软件wget&#xff0c;如下这是64位的包&#xff0c;解压后&#xff0c;下面有个wget.exe&#xff0c;拷贝到C:\Windows\System32、 然后打开cmd&#xff0c;执行wget -V 如上&#xff0c;有版本信息就O…

Java变量的声明和初始化,Java变量的作用域:静态变量、全局变量和局部变量

java 语言是强类型&#xff08;Strongly Typed&#xff09;语言&#xff0c;强类型包含以下两方面的含义&#xff1a; 所有的变量必须先声明、后使用。指定类型的变量只能接受类型与之匹配的值。 这意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变…

2.springcloudalibaba项目搭建(基于alibaba2021.0.5.0版本)

文章目录 [TOC](文章目录) 前言一、项目配置1.1 pom配置1.2 nacos新建命名空间1.3 项目配置1.4 nacos上配置配置文件1.5 代码新增测试读取服务配置代码1.6 启动类增加注解 二、启动服务并测试2.1 启动服务&#xff0c;查看是否注册成功2.2 测试是否读取到了nacos上的配置 总结 …

嵌入式系统中的加密性能:第2部分

本系列的第1部分讨论了影响系统级密码性能的硬件和软件变量。现在&#xff0c;在第2部分中&#xff0c;我们将重点介绍两种用于测量高级后备加速器性能的方法&#xff1a;1&#xff09;驱动器级加速器测试以识别加速器或SoC内存带宽约束&#xff0c;以及2&#xff09;应用程序/…