2016-09-20 70 views
1

我正在寫在C程序的控制,在這個模型:空調系統()採用標準輸出

//Block 1: Does a lot of operations, including debug messages 

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

system(call); 

//Block 2: Does a lot of operations, including debug messages 

system()調用後,它看起來像這一函數的標準輸出的控制及塊2調試消息不會打印更長時間,只會顯示Block 1消息。

是否有人知道發生了什麼,以及可能的解決方案是什麼?

+0

'system'調用等待其子進程結束。換言之,只有在'xdg-open'將被關閉時,控件纔會被傳遞給block2。 –

+0

我現在明白,但我該如何解決這個「問題」? – amportugal

回答

0

當您使用int system(const char *command)函數執行某個其他應用程序時,應用程序將等待直到被叫方退出。這就是爲什麼你看不到Block 2的輸出。

您可以通過在end off命令中添加&來解決此問題,這會導致整個應用程序將作爲不同的進程運行。所以,你可以試試這個:

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

system(call); 

你也可能需要刷新stdout緩衝,所以Block 2後打電話fflush(stdout)

+0

做同樣的結果,我已經嘗試過。看起來命令的執行結束了,但stdout保持不變。 – amportugal

+0

嘗試在打印調試消息後調用'fflush(stdout)'。 – Firzen

+0

它暫時解決了這個問題,但是這是一個非常複雜的程序的一個功能,它煩人不得不這樣做來打印調試消息。 – amportugal