C 用非阻塞函数替换system()

C 用非阻塞函数替换system(),c,C,我不想在我的C程序中使用system(),因为system(3)阻塞,这不是我想要的。做这件事的最佳方式是什么 使用fork()创建新流程,然后在其中使用system()(或任何exec函数)。原始进程将能够继续执行。您可能需要使用popen。它创建新进程并允许您将进程输出重定向到自己的进程。如果在windows中,请使用windows API中的ShellExecute()函数 如果在Unix中,请按前面所述选择fork(),然后选择system()。我认为一个快速而肮脏的操作是调用系统(命令

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

使用
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
    。这是否回答了您的问题?