使用系统调用与基于库的方法压缩目录的优缺点

Pros and cons of using a system call vs library based approach to compress a directory

本文关键字:方法 压缩 优缺点 于库 系统调用      更新时间:2023-10-16

>场景:
我正在运行带有C++应用程序的嵌入式 Linux 发行版。我需要简单地压缩一个目录并将压缩输出放在某个位置。就是这样。

我知道我们可以在命令行界面上使用以下命令 tar 压缩目录。

tar cvzf directory.tar.gz /path/to/directory

看到我可以选择在C++中运行系统命令。下面是一个示例。

void CompressDirectory() {
    std::system("tar cvzf directory.tar.gz /path/to/directory");
}

环境:
嵌入式 Linux

问题:
我想知道对目录进行系统调用与使用 zlib、zipios 等库的优缺点。

system()通常不受欢迎,因为它存在潜在的安全风险。 在你的特定情况下,一切都明确说明,你会没事的。

您可以在程序中对其进行编码,以编程方式进行处理和处理,而不是将其掏出,这是正确的方法。

只要你的压缩包名称和目录都是硬编码的,我想不出任何安全问题,但我会小心你确定你没有覆盖任何东西或类似的东西。

如果除了您自己之外的任何人甚至能够触摸您的服务器,请不要使用system()

  1. 至少您不会检查当前代码中的结果。您不知道压缩是否失败。
    您至少必须检查退出代码。
  2. 通常,tar在命令行中不可用(例如,在窗口上)。
    这不是你的情况,所以你可以忽略这一点。
  3. 自定义库应提供更灵活的压缩。像暂停,选择文件,无限数量的文件等。