使用 popen() 将流数据传输到 TAR

问题描述 投票:0回答:0

我一直在寻找这个问题的答案,但没有找到有效的解决方案。我们的产品有一个内置的网络服务器,并使用 HTTP POST 命令来执行软件更新。更新是一个包含两个文件的 targz 文件。为了响应 POST 命令,我正在尝试这样做:

part = ::popen("tar –xvz --overwrite -C /dev -f -", "w");

据我所知,“-f -”在与“|”一起使用时在命令行上工作操作员。 popen 成功了,但是在控制台上,我看到了这个:

tar: invalid option -- '�'

Try 'tar --help' or 'tar --usage' for more information.

我试过没有“-C”和“--overwrite”开关但没有成功。我所期望的是,当我们的软件使用 fwrite() 流式传输文件内容时,tar 会等待读取管道,并在所有数据传输完毕后调用 pclose()。但是 tar 正在关闭它的管道并在 popen() 上退出,而第一个 fwrite() 失败。

有没有办法在不保存到中间文件的情况下完成这项工作?这些文件是磁盘映像,因此可能很大,超过 2GB。

我正在使用基于 Debian 的最新映像在 Raspberry Pi 4 上运行它。

stdin tar popen
© www.soinside.com 2019 - 2024. All rights reserved.