从c++程序创建tar.gz-archive不能工作
Creating tar.gz-archive from c++ program does not work
我使用以下代码片段在一个广泛的测量软件中创建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;
我知道有几个库,如libarchive
, libtar
等,使用不像触发系统命令那样懒惰,但我想知道为什么这对我的情况不起作用。
另外,我的忙框中tar
的版本不支持z
选项
我终于找到了一个解决我的问题的方法,也许对于所有的情况下,当一个系统命令被一个守护进程调用:
技巧是通过命令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());
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么虚函数不能是静态的和全局的?
- 为什么我不能在 while 循环中创建线程?
- 为什么这个音频包络不能通过开关的情况?
- 从c++程序创建tar.gz-archive不能工作