【发布时间】:2011-04-19 19:24:49
【问题描述】:
我不想在我的 C 程序中使用 system(),因为 system(3) 会阻塞,这不是我想要的。最好的方法是什么?
【问题讨论】:
-
这能回答你的问题吗? Non-blocking version of system()
标签: c
我不想在我的 C 程序中使用 system(),因为 system(3) 会阻塞,这不是我想要的。最好的方法是什么?
【问题讨论】:
标签: c
我认为一个快速而肮脏的动作是调用 sytem(command &)。 & 将产生新的进程。
【讨论】:
system() 无论如何都是平台相关的。不要用fork() 或类似的东西弄乱你的源代码,而是使用system() 允许你访问的shell。
使用fork() 创建一个新进程,然后在其中使用system()(或任何exec 函数)。然后原始进程将能够继续执行。
【讨论】:
答案取决于您的真正目标是什么。你没有说你在什么平台上,而且我对 Windows 知之甚少,所以这里只涵盖你在 linux/unix 上的选择。
【讨论】:
fork() 然后 system() 将留下一个无用的进程等待 shell 完成。最好在子进程中调用execve() 或类似名称,而不是system()。如果你想使用 shell 的功能,那么 exec /bin/sh.
您可能想使用popen。它会创建新流程并允许您将流程输出重定向到您自己的流程。
【讨论】:
如果在 Windows 中,请使用 Windows API 中的 ShellExecute() 函数。
如果在 Unix 中,请选择 fork(),然后选择 system(),如上所述。
【讨论】: