我正在 openFrameworks 中编写程序,这是一个 C++ 框架。我想启动另一个应用程序并通过标准输入和标准输出与其通信。我可以使用 ofThread 类方便地启动一个新线程。我曾计划创建两个管道并将 std 进出线程重定向到管道(使用 dup2),但不幸的是,这会重定向整个应用程序的管道,而不仅仅是线程。
有没有一种方法可以启动另一个应用程序并能够读取其输出并为其提供输入?
最佳答案
您需要使用 fork()
创建子进程而不是另一个线程函数(本质上可能涉及另一个线程)。
不同之处在于,fork 创建了父进程环境的完整拷贝,应该在子进程范围内的 exec()
调用中显示,而只是 exec()
来自线程的尝试共享来自其父进程(线程)的所有资源,因此可能导致意外的并发(竞争条件)问题。
关于c++如何使用新的标准输入和标准输出启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26644328/