2016-09-20 73 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