从c ++程序创建tar.gz-archive不起作用

时间:2016-09-15 06:13:18

标签: c++ linux archive tar

我使用以下代码段在广泛的测量软件中创建tar.gz - 存档。收集几个文件中的一些数据后,我想将其存档并压缩以供以后使用。 当我从shell启动程序时,一切正常,所有数据都被正确收集和存档。

但是,程序应该在嵌入式Linux系统的系统启动后自动启动。当它通过/etc/init.d中的脚本启动时,即使我得到返回值0,也不会存档/压缩任何数据文件。此外,tar.gz文件已创建,但它是空的。 其他一切都很好。

任何人都可以解释一下,在这个自动启动的特殊情况下我该做些什么?

int returnValue = -1;
std::string jobString = RESULT_PATH;
jobString += "/";
jobString += lastJobString;
std::string jobFiles = lastJobString + "*.*";

std::string cmd = "tar cvf - ";
cmd += jobFiles;
cmd += " | gzip > ";
cmd += jobString;
cmd += ".tar.gz";

std::cout << "archiving and compressing " << jobFiles << ": " << cmd << std::flush << std::endl;

returnValue = system(cmd.c_str());

std::cout << "archiving and compressing finished. Code: " << returnValue << std::flush << std::endl;

我知道有几个librariers,比如libarchivelibtar等,使用它们并不像启动系统命令那样懒,但我想知道为什么这不起作用对于我的情况。

此外,我忙的框中的tar版本不支持选项z

1 个答案:

答案 0 :(得分:-1)

我终于为我的问题找到了解决方案,也许是在守护程序调用系统命令的所有情况下:

诀窍是通过命令sh创建一个新shell,并在调用tar函数之前更改当前目录:

std::string cmd = "sh -c \" cd ";
cmd += SOURCE_DIR;
cmd+= " && tar cvf - ";
cmd += jobFiles;
cmd += " | gzip > ";
cmd += jobString;
cmd += ".tar.gz";

returnValue = system(cmd.c_str());

也许这会帮助其他用户解决同样的问题。