C 用非阻塞函数替换system()
我不想在我的C程序中使用system(),因为system(3)阻塞,这不是我想要的。做这件事的最佳方式是什么 使用C 用非阻塞函数替换system(),c,C,我不想在我的C程序中使用system(),因为system(3)阻塞,这不是我想要的。做这件事的最佳方式是什么 使用fork()创建新流程,然后在其中使用system()(或任何exec函数)。原始进程将能够继续执行。您可能需要使用popen。它创建新进程并允许您将进程输出重定向到自己的进程。如果在windows中,请使用windows API中的ShellExecute()函数 如果在Unix中,请按前面所述选择fork(),然后选择system()。我认为一个快速而肮脏的操作是调用系统(命令
fork()
创建新流程,然后在其中使用system()
(或任何exec
函数)。原始进程将能够继续执行。您可能需要使用popen
。它创建新进程并允许您将进程输出重定向到自己的进程。如果在windows中,请使用windows API中的ShellExecute()
函数
如果在Unix中,请按前面所述选择
fork()
,然后选择system()
。我认为一个快速而肮脏的操作是调用系统(命令&)。&将生成新进程 答案取决于你真正的目标是什么。你没有说你在什么平台上,我对Windows知之甚少,所以这只包括你在linux/unix上的选择
fork()
,并调用需要在子对象中运行的任何函数fork()
并使用文件描述符对进行通信。或者,您可以通过套接字、消息队列、共享内存等进行通信绝对是+1<代码>系统()。不要用
fork()
或诸如此类的东西把源代码弄得一团糟,使用system()
为您提供访问权限的shell。如果您了解手头的选项的详细情况,以及如何在它们之间进行选择,那么使用比fork好得多的解决方案。fork()
然后system()
将留下一个无用的进程等待shell完成。最好在子进程中调用execve()
或类似函数,而不要调用system()
。如果要使用shell的功能,请执行exec/bin/sh
。这是否回答了您的问题?