用非阻塞函数替换system()

cat*_*eof 5 c

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

cat*_*eof 12

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


aby*_*byx 8

使用fork()创建一个新的进程,然后使用system()(或任何exec功能)它.然后原始进程将能够继续执行.


bst*_*rre 7

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

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

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

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

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


Did*_*set 6

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