2011-08-11 70 views
1

我需要解压文件运行的C++程序(如Waiting for unzip to finish before carrying on C++ code on a RedHat machine描述)解压从C++在Redhat文件:替代系统()

要做到这一点,我现在做这样的事情,而:

​​

将“/usr/bin/File/ZippedFile.gz”解压缩到“/ usr/bin/File/ZippedFile”中,没有任何问题。

这工作正常。但我注意到很多人似乎都说使用

system() 

是禁忌。

由于安全和系统资源(如此处所述:http://www.cplusplus.com/forum/articles/11153/),人们似乎并不喜欢它。

但是,因为我想让程序等到解压缩完成,是否有一个可行的选择?

回答

4

您可以使用普通的zlibboost::iostreamgzip facility

系统是没有错的本身,但你也可以为它编写的替代品不与forkexecwaitmkstemp使用shell。这很麻烦。如果您解压单个文件,使用boost::gzip_decompressor是我最好的C++选项。分叉和朋友可能会更好,如果你需要解压缩目录。请务必阅读mkstemp

有关fork和exec家庭速成班:http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

对于使用wait为您的孩子到终止的例子:http://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/wait.htm

有关创建一个临时目录参考:http://www.gnu.org/s/hello/manual/libc/Temporary-Files.html

0

是的,这是不好的做法,由于各种原因(安全性,便携性等)。你需要得到一个压缩库(谷歌搜索给我像http://www.firstobject.com/easy-zlib-c++-xml-compression.htm或甚至用于建立“解压缩”,如果它是免费的,但必须有负载)的库,然后使用它,如果你需要做到并行然后引入线程。有点工作我同意,但在实践中比使用system()调用更好。