创建一个需要通过stdin(发送命令)与C ++引擎通信并读取其stdout(读取引擎响应)的GUI。我在iOS环境中这样做,所以我不能分叉流程并在它们之间进行通信,但我可以创建新的线程,我认为应该可以正常工作。
我已经查看了与此类似的其他问题,但他们主要通过fork()
使用我无法使用的流程分叉。处理线程时它是一个类似的方法吗?
C ++中有什么东西可以通过标准输入/输出促进线程间通信吗?或者应该研究C函数(例如pthread_create
和dup2
)?
编辑:有人指出我的问题是XY问题,因此有关源问题的更多说明:C ++引擎是一种通常通过命令行界面运行的国际象棋游戏引擎。您可以通过CLI中的标准输入与其进行交互(即输入移动)。我将它打包在一个不能这样做的iOS应用程序中(没有分叉或终端访问)所以我试图以编程方式模拟stdin到引擎的主循环,它通过stdin监听用户输入
答案 0 :(得分:4)
将stdin / stdout重定向到管道的旧式Unix方法是:
close(0);
close(1);
int io[2];
if(pipe(io))
perror("ERROR, blah blah");
说明:
Unix OS承诺将新的文件描述符附加到可用的最低可用文件描述符(这是一个从索引0开始直到进程的最大分配大小的数组)。
通过关闭stdin(0)和stdout(1),这些文件描述符变得可用。
通过打开管道,这些文件描述符(0和1)将附加到新管道。
引用这两个fie描述符的任何东西现在都引用了新的管道。