【问题标题】:Execute interactive CLI appilcation from C/C++ [closed]从 C/C++ 执行交互式 CLI 应用程序 [关闭]
【发布时间】:2019-10-25 14:04:17
【问题描述】:

Java 支持java.lang.Process。这可以与java.lang.ProcessBuilderRuntime.exec 一起使用。对象为java.lang.Process。我可以通过读取输出流/错误流并写入输出流来与底层应用程序交互。

是否有任何方法/库可以在 c 或 c++ 中做类似的事情?

我尝试popen,但它是单向的,即我可以写或读,不能两者兼得。

欢迎提出任何建议。如果没有解决方案但有一些解决方法,也欢迎。

更新:我正在寻找 Linux 平台的解决方案。

【问题讨论】:

  • 请尽量避免使用“C/C++”之类的术语。没有像“C/C++”这样的语言,只有非常不同的语言C和C++。选择您需要帮助的一种语言,并坚持下去。
  • 另一方面,C 和 C++ 都没有运行外部程序的标准功能,这完全取决于平台。而且由于您没有指定目标平台,因此范围很广。
  • 没有本地跨平台调用,Windows 有CreateProcess 不确定 *nix。虽然我确信您可以通过 Google 找到可扩展的跨平台包装器。
  • 鉴于您的链接,我想您将使用 linux,因此请查看 systemexec,具体取决于您想要做什么,这可能会派上用场,请不要(c/ c++),很痛
  • @Someprogrammerdude。点好。更新的问题。

标签: java c++ c


【解决方案1】:

没有跨平台的方法可以从 C 或 C++ 启动新进程。假设每个平台都有进程的概念,那么每个平台都有自己的接口来执行此操作。

您最有可能遇到的两个界面是 Windows CreateProcess 和 POSIX fork/exec

由于您提到读取/写入子进程的输出/输入,您还需要使用平台的管道函数:Windows 上的CreatePipe 或 POSIX 兼容平台上的pipe


所有这些都有跨平台包装器,例如Boost Process。但是标准库中不包含任何内容,因此您必须像构建/安装任何其他第三方库一样构建/安装它们。

【讨论】:

    【解决方案2】:

    如果您可以使用托管 C++ 和 .NET,则可以使用 System.Diagnostics.Process,它的作用与 java.lang.Process 相同。

    Input Redirection

    Output Redirection

    需要注意的是,您需要将二进制文件构建为 C++/CLI 项目,并将 .NET 作为依赖项。您可以通过将托管代码放在单独的实用程序库中来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2012-04-30
      • 2017-03-25
      • 1970-01-01
      • 2014-02-18
      相关资源
      最近更新 更多