将线程之间的标准输入/输出重定向

Redirect standard input/output between threads

本文关键字:输出 重定向 标准输入 线程 之间      更新时间:2023-10-16

我正在创建一个GUI,需要通过stdin(发送命令(与C 引擎进行通信并阅读其Stdout(读取引擎响应(。我正在在iOS环境中这样做,因此我无法分配过程并在它们之间进行交流,但是我可以创建新线程,我认为应该可以正常工作。

我已经研究了与此相似的其他问题,但是它们主要利用我无法使用的fork()分叉的过程。处理线程时是类似的方法吗?

C 中是否有一些可以通过标准输入/输出来促进线际上的通信?还是应该研究C功能(例如pthread_createdup2(?

编辑:指出我的问题是一个XY问题,因此为了对源问题进行更多澄清:C 引擎是通过命令行正常接口运行的国际象棋游戏引擎。您可以通过CLI中的标准输入与它进行交互(即输入移动(。我正在将其包装在一个无法执行此操作的iOS应用程序中(无叉或终端访问(,因此我试图将stdin模拟到引擎的主循环中,以通过STDIN聆听用户输入。

将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描述符的内容现在都在引用新管道。