c ++如何使用新的stdin和stdout启动进程

时间:2014-10-30 02:59:37

标签: c++ openframeworks

我正在openFrameworks中编写一个程序c ++框架。我想启动另一个应用程序并通过stdin和stdout与它通信。我可以使用ofThread类方便地启动一个新线程。我曾计划创建两个管道并将std重定向到线程中(使用dup2),但不幸的是,这会重定向整个应用程序的管道,而不仅仅是线程。

有没有办法可以启动另一个应用程序,并能够读取其输出并提供输入?

2 个答案:

答案 0 :(得分:3)

您需要使用fork()函数(可能涉及另一个线程)来创建子进程,而不是另一个线程。

不同之处在于,fork创建了父进程环境的完整副本,该副本应该在子进程范围内的exec()调用中显示,而来自线程的exec()尝试共享来自它的父进程(线程)的所有资源因此可能导致意外的并发(种族条件)问题。

答案 1 :(得分:0)

如果您的“另一个应用”在现有程序中实现为子线程,则不需要 重定向stdin和stdout以通过管道与其进行通信。只需在启动时将管道文件描述符传递给子线程。 (您可以使用fdopen将文件描述符包装在FILE对象中。如果您有dup2pipe,那么您也有fdopen。)