我想在我的Redhat机器上解压缩一个压缩文件夹。
为此,我发送一个bash脚本字符串;
"unzip /usr/bin/Folder.gz"
这解压文件夹没问题,因为我得到了一般的
inflating folderA/folderB/fileX
等
但是,我想在unzip命令中保存代码,等待解压缩完成。
我尝试过使用
sleep(5)
但我不想使用它,只是希望它总是花费不到五秒钟,特别是对于非常小的压缩文件来说效率很低。
我在线搜索但无济于事......
所以我的问题是;什么是在解压缩完成之前停止程序的可靠方法?
编程语言:C ++
IDE:Eclipse
答案 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)
我不知道这是否过度或无效,但您可以将解压缩的过程移至另一个线程,并停止主线程直到该线程完成处理