2011-08-08 53 views
0

我想在我的Redhat機器上解壓縮一個壓縮文件夾。在RedHat機器上進行C++代碼之前等待解壓完成

要做到這一點,我發送一個bash腳本的字符串;

"unzip /usr/bin/Folder.gz" 

這解壓的文件夾沒有問題,因爲在我得到的一般

inflating folderA/folderB/fileX 


不過,我想在unzip命令來保存代碼,等待直到解壓縮完成。

我一直在使用

sleep(5) 

試過,但我並不想用這個,只是希望它總是會少於五秒尤其是這將是低效的非常小的壓縮文件。

我在網上,但無濟於事搜索...

所以我的問題是;什麼是一個可靠的方式來拖延一個程序,直到解壓縮完成?


O/S:紅帽

編程語言:C++

IDE:Eclipse的

+1

如何發送字符串 - 即C++代碼 – Mark

回答

2

如何運行bash腳本?

如果您使用system() API,它將啓動該程序,然後等待生成的過程結束。

system()系統是由3個其他系統調用:execl(),wait()和fork()組成的調用。 Source

+0

我已經使用了系統命令,正如你所建議的。但是有很多人說使用系統命令是禁忌。爲什麼是這個,應該做什麼呢? – Andy

+0

@安迪:這是一個相關的問題,但另一個問題和這一個。請把它作爲一個新問題發佈。 –

2

嘗試:

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

這將導致shell等待完成最後一道工序。最後執行的命令的pid存儲在$!中。

不知道這與C++有什麼關係,但如果您想從代碼執行相同的操作,則可以使用waitpid函數。

當然,如果你想讓你的程序在unzip執行時被阻塞,我對於確切的問題有些困惑。假設您使用system或某些等效項來運行解壓縮,它應該阻塞,直到命令完成。

+0

爲什麼不使用'unzip/usr/bin/Folder.gz'而不使用'&'?在C++中,你只需執行'system(「unzip /usr/bin/Folder.gz」)'(而不是fork/execve/while waitpid) –

+0

這是正確的,我在不久之後編輯了我的答案。我在OP等待「unzip」完成時想要做的工作的印象之下,然後加入完成該過程。 –

0

我不知道這是否會矯枉過正或inefficent,但你可以移動解壓到另一個線程的過程,直到線程完成停止你的主線程處理

1

我不確定這是最好的方法,但它是可靠的。 現在只需將命令發送到bash,爲什麼不將輸出發送到某個文件。

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

閱讀從你的C++代碼定期文件(可以說1秒),一旦你找到100%或任何輸出的最後一行應包含,然後用你的代碼進行。

相關問題