用非阻塞函数替换system()
我不想在我的C程序中使用system(),因为system(3)阻塞了,这不是我想要的。 这样做的最佳方式是什么?
我认为快速而肮脏的动作是调用sytem(command&)。 &将产生新的过程。
使用fork()
创建一个新进程,然后在其中使用system()
(或任何exec
函数)。 然后原始进程将能够继续执行。
答案取决于你的真正目标。 你没有说你正在使用什么平台,而且我对Windows知之甚少,所以这只涵盖你在linux / unix上的选择。
-
您只想生成另一个程序,而不需要与它交互。 在这种情况下,调用
fork()
,然后在子进程中运行execve()
(或相关函数)。 -
您想与其他程序进行交互。 在这种情况下,请使用
popen()
。 -
您希望程序的一部分作为子进程运行。 在这种情况下,使用
fork()
,并调用您需要在子进程中运行的任何函数。 -
您需要与作为子进程运行的程序的一部分进行交互。 调用
pipe()
这样你就可以通过文件描述符进行通信,然后调用fork()
并使用文件描述符对进行通信。 或者,您可以通过套接字,消息队列,共享内存等进行通信。
您可能想要使用popen
。 它创建新流程并允许您将流程输出重定向到您自己的流程。
如果在Windows中,请使用Windows API中的ShellExecute()
函数。
如果在Unix中,请按照前面提到的fork()
system()
。