2011-08-08 11 views
0

上のC++コードに運ぶ前に終了するの解凍を待っています。は、私は私のRedHatのマシン上でzip圧縮フォルダを解凍したいのRedHatマシン

これを行うには、bashスクリプトに文字列を送信します。私は


は、しかし、私は解凍コマンドでコードを保持したい一般

inflating folderA/folderB/fileX 

など取得のように

"unzip /usr/bin/Folder.gz" 

これは待って、何の問題のフォルダを解凍しません解凍が完了するまで

私は

sleep(5) 

を使用して試してみましたが、私はこれを使用すると、ちょうど特に、これは非常に小さいZIPファイルには非効率的になりますです、それは常に5秒未満を取ることを願っていません。

私は私の質問は...オンラインしかし、無駄に

を検索しました。解凍が完了するまでプログラムをストールする信頼できる方法は何ですか?


O/S:RedHatの

プログラミング言語:C++

IDE:

+1

どのように文字列を送信するのですか?つまり、C++コード – Mark

答えて

2

の処理を終了するまで、あなたのメインスレッドを停止bashスクリプト?

あなたがsystem() APIを使用する場合には、プログラムを起動し、その後、生成されたプロセスが終了するまで待ちます。 EXECL()、待機()とフォーク():

system()

システムは3回の他のシステムコールで構成されているコールです。 Source

+0

システムコマンドを使用しました。しかし、そこには、システムコマンドを使用することがタブーであると言う人がたくさんいます。なぜこれが、代わりに何をすべきか? – Andy

+0

@Andy:これは関連する質問ですが、別の質問とこれです。新しい質問として投稿してください。 –

2

てみエクリプス:

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

シェルが完了を待つことになります最後のプロセスの最後に実行されたコマンドのPIDは$!に格納されます。

これはC++に関連していますが、コードから同じことを行いたい場合は、waitpid機能を使用することができますかわかりません。もちろん

、あなたはunzip私は、正確な問題が何であるかに関して、少し混乱している実行している間、あなたのプログラムをブロックしたい場合。 systemまたはunzipを実行するために同等のものを使用していると仮定すると、コマンドが完了するまでブロックされます。

+0

'&'なしで 'unzip/usr/bin/Folder.gz'を使用してみませんか? C++では、単純に 'system(" unzip /usr/bin/Folder.gz ")'を実行します(wait/idの間にfork/execve/whileの代わりに) –

+0

これは間違いありません。私は、OPが「解凍」が完了するのを待っている間に作業をしたいと思っていたし、そのプロセスの完了に参加するという印象を受けました。 –

0

これはやり過ぎかinefficentになる場合、私は知りませんが、あなたが別のスレッドに解凍の過程を動かすことができ、そのスレッドは、実行するにはどうすればよい

1

私はこれが最善の方法です、本当にわからないんだけど、それが信頼性があります。 代わりに、コマンドをbashに送信するだけで、出力を何らかのファイルに送信してください。あなたは100%を見つけるか、どんな出力の最後の行が含まれている必要があり、その後、あなたのコードに続けていく一度

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

あなたのC++コードから定期的にファイルを読むには、(1秒を言うことができます)。

関連する問題