用非阻塞函数替换system()

时间:2010-10-01 11:05:49

标签: c

我不想在我的C程序中使用system(),因为system(3)阻塞,这不是我想要的。这样做的最佳方式是什么?

5 个答案:

答案 0 :(得分:12)

我认为快速而肮脏的动作是调用system(command&)。他们&将产生新的过程。

答案 1 :(得分:8)

使用fork()创建新流程,然后在其中使用system()(或任何exec功能)。然后,原始流程将能够继续执行。

答案 2 :(得分:7)

答案取决于你的真正目标。你没有说你正在使用什么平台,我对Windows知之甚少,所以这只涵盖你在linux / unix上的选择。

  1. 您只想生成另一个程序,而不需要与它交互。在这种情况下,请调用fork(),然后在子进程中运行execve()(或相关函数)。

  2. 您想要与其他程序进行互动。在这种情况下,请使用popen()

  3. 您希望程序的一部分作为子进程运行。在这种情况下,请使用fork(),并调用您在孩子中运行所需的任何功能。

  4. 您需要与作为子流程运行的程序的一部分进行交互。调用pipe(),这样你就可以通过文件描述符进行通信,然后调用fork()并使用文件描述符对进行通信。或者,您可以通过套接字,消息队列,共享内存等进行通信。

答案 3 :(得分:6)

您可能想要使用popen。它创建新流程,并允许您将流程输出重定向到您自己的流程。

答案 4 :(得分:3)

如果在Windows中,请使用Windows API中的ShellExecute()功能。

如果在Unix中,请按照fork()然后system()进行操作。