用非阻塞函数替换system()

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

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

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

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

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

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

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

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

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

如果在Windows中,请使用Windows API中的ShellExecute()函数。

如果在Unix中,请按照前面提到的fork() system()