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

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

场景:
我正在 运行 正在 嵌入式 linux 发行版上安装 C++ 应用程序。我需要简单地压缩一个目录并将压缩后的输出放在某个位置。而已。

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

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

我发现我可以选择 运行 C++ 系统命令。下面是一个例子。

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

环境:
嵌入式Linux

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

system() 通常不受欢迎,因为它存在潜在的安全风险。在您明确说明所有内容的特定情况下,您就可以了。

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

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

如果除您以外的任何人甚至可以访问您的服务器,请不要使用 system()

  1. 至少你没有检查当前代码中的结果。压缩失败你不知道
    你至少要检查exit code
  2. 一般情况下 tar 在命令行中不可用(例如在 windows 上)。
    这不是你的情况,所以你可以忽略这一点。
  3. 自定义库应该提供更灵活的压缩。比如暂停,select个文件,无限个文件等等。