2016-09-20 2 views
1
私はC言語でプログラムを書いている

を制御しますメッセージは印刷されず、ブロック1のメッセージのみが印刷されます。Cシステムは、()は、このモデルでは、標準出力

誰が何が起こっているのか、その解決策は何かを知っていますか?

+0

'system'コールは、そのサブプロセスが終了するのを待ちます。言い換えれば、 'xdg-open'が閉じられるときにのみ、コントロールはブロック2に渡されます。 –

+0

私は今理解していますが、どうすれば "問題"を解決できますか? – amportugal

答えて

0

int system(const char *command)関数を使用して他のアプリケーションを実行すると、呼び出されたアプリケーションが終了するまでアプリケーションは待機します。そのため、Block 2の出力は表示されません。

&を最後のオフコマンドに追加すると、アプリケーション全体が異なるプロセスとして実行されます。だから、あなたはこれを試すことができます。

strcpy(call, "xdg-open "); 
strcat(call, url); 
strcat(call, " &"); 

system(call); 

また、あなたはstdoutバッファをフラッシュするので、Block 2fflush(stdout)を呼び出す必要があります。

+0

同じ結果を出す前に、私はそれを試しました。コマンドの実行は終了したようですが、stdoutは同じままです。 – amportugal

+0

デバッグメッセージを出力した後、 'fflush(stdout)'を呼び出すようにしてください。 – Firzen

+0

これは問題を一時的に解決しますが、これは非常に複雑なプログラムの1つの機能です。デバッグメッセージを印刷するのは面倒です。 – amportugal

関連する問題