在RedHat机器上执行C ++代码之前等待解压缩完成

时间:2011-08-08 13:57:48

标签: c++ zip redhat unzip

我想在我的Redhat机器上解压缩一个压缩文件夹。

为此,我发送一个bash脚本字符串;

"unzip /usr/bin/Folder.gz"

这解压文件夹没问题,因为我得到了一般的

inflating folderA/folderB/fileX


但是,我想在unzip命令中保存代码,等待解压缩完成。

我尝试过使用

sleep(5)

但我不想使用它,只是希望它总是花费不到五秒钟,特别是对于非常小的压缩文件来说效率很低。

我在线搜索但无济于事......

所以我的问题是;什么是在解压缩完成之前停止程序的可靠方法?


O / S:Redhat

编程语言:C ++

IDE:Eclipse

4 个答案:

答案 0 :(得分:2)

尝试:

unzip /usr/bin/Folder.gz &
wait $!

这将导致shell在最后一个进程完成时等待。上次执行的命令的pid存储在$!

不确定这与C ++有什么关系,但如果你想从代码中做同样的事情,可以使用waitpid函数。

当然,如果你希望程序在执行unzip时阻止,我对确切的问题有点困惑。假设您使用system或某些等效项来运行解压缩,它应该阻塞直到命令完成。

答案 1 :(得分:2)

如何运行bash脚本?

如果你使用system() API,它将启动程序,然后等到产生的进程结束。

system()系统是一个由3个其他系统调用组成的调用:execl(),wait()和fork()。 Source

答案 2 :(得分:1)

我不确定这是最好的方法,但它是可靠的。 现在只需将命令发送到bash,为什么不将输出发送到某个文件。

unzip /usr/bin/Folder.gz > output.txt

一旦找到100%或输出的最后一行应该包含的内容,请定期从C ++代码(比方说1秒)读取文件,然后继续使用您的代码。

答案 3 :(得分:0)

我不知道这是否过度或无效,但您可以将解压缩的过程移至另一个线程,并停止主线程直到该线程完成处理