簡體   English   中英

重定向線程之間的標准輸入/輸出

[英]Redirect standard input/output between threads

我正在創建一個GUI,該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描述符的所有內容都在引用新管道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM