使用系统调用与基于库的方法压缩目录的优缺点
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
system()
通常不受欢迎,因为它存在潜在的安全风险。在您明确说明所有内容的特定情况下,您就可以了。
您可以在程序中对其进行编码,以便以编程方式进行处理和处理,而不是将其剥离,这才是正确的做法。
只要你的 tarball 名称和目录都是硬编码的,我想不出任何安全问题,但我会小心你确定你没有覆盖任何东西或类似的东西。
如果除您以外的任何人甚至可以访问您的服务器,请不要使用 system()
。
- 至少你没有检查当前代码中的结果。压缩失败你不知道
你至少要检查exit code。
- 一般情况下
tar
在命令行中不可用(例如在 windows 上)。
这不是你的情况,所以你可以忽略这一点。
- 自定义库应该提供更灵活的压缩。比如暂停,select个文件,无限个文件等等。
场景:
我正在 运行 正在 嵌入式 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
system()
通常不受欢迎,因为它存在潜在的安全风险。在您明确说明所有内容的特定情况下,您就可以了。
您可以在程序中对其进行编码,以便以编程方式进行处理和处理,而不是将其剥离,这才是正确的做法。
只要你的 tarball 名称和目录都是硬编码的,我想不出任何安全问题,但我会小心你确定你没有覆盖任何东西或类似的东西。
如果除您以外的任何人甚至可以访问您的服务器,请不要使用 system()
。
- 至少你没有检查当前代码中的结果。压缩失败你不知道
你至少要检查exit code。 - 一般情况下
tar
在命令行中不可用(例如在 windows 上)。
这不是你的情况,所以你可以忽略这一点。 - 自定义库应该提供更灵活的压缩。比如暂停,select个文件,无限个文件等等。