将线程之间的标准输入/输出重定向
Redirect standard input/output between threads
我正在创建一个GUI,需要通过stdin(发送命令(与C 引擎进行通信并阅读其Stdout(读取引擎响应(。我正在在iOS环境中这样做,因此我无法分配过程并在它们之间进行交流,但是我可以创建新线程,我认为应该可以正常工作。
我已经研究了与此相似的其他问题,但是它们主要利用我无法使用的fork()
分叉的过程。处理线程时是类似的方法吗?
C 中是否有一些可以通过标准输入/输出来促进线际上的通信?还是应该研究C功能(例如pthread_create
和dup2
(?
编辑:指出我的问题是一个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描述符的内容现在都在引用新管道。
相关文章:
- 将标准输出重定向到ostream
- 在程序执行期间从标准输出重定向到自定义流
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- 将 Linux system() 调用命令的输出重定向到仅可变的
- 将 ffmpeg 控制台输出重定向到C++中的字符串或文件
- Win32 GUI C(++) 应用将标准输出和标准输出重定向到磁盘上的同一文件
- 将线程之间的标准输入/输出重定向
- GDB Cygwin 不会将输出重定向到文件
- 如何将 printf 流输出重定向到.csv文件
- 将PowerShell.exe的输入和输出重定向到C 中的管道
- Windows Batch - 如何在将标准输出重定向到文件时添加时间戳
- 将一个进程标准输出重定向到管道将产生不同的运行结果
- 如何将我的应用程序生成的标准 Mac OS X 日志输出重定向到文件
- 正在将控制台输出重定向到同一解决方案中的MFC屏幕输出
- 函数 system() 中的输出重定向似乎不起作用
- 使用 ofstream 将控制台输出重定向到文件C++末尾
- 将 printf C++控制台输出重定向到 C#
- 将打印到控制台的函数输出重定向到字符串
- 为外壳输出重定向创建文件
- 将调试输出重定向到空流而不是 std::cerr