我一直在寻找这个问题的答案,但没有找到有效的解决方案。我们的产品有一个内置的网络服务器,并使用 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 上运行它。