コンソール端末自体と同じように、外部プログラムを実行し、その stdin と stdout に交互にアクセスする必要があります。popen() を使用しましたが、双方向パイプを提供しません。読み取りパイプにアクセスするには書き込みパイプを閉じる必要があるため、pipe() と fork() の使用も対話的には機能しません。
それを思いつくための助けをください。
コンソール端末自体と同じように、外部プログラムを実行し、その stdin と stdout に交互にアクセスする必要があります。popen() を使用しましたが、双方向パイプを提供しません。読み取りパイプにアクセスするには書き込みパイプを閉じる必要があるため、pipe() と fork() の使用も対話的には機能しません。
それを思いつくための助けをください。
2つのパイプを開く必要があります。1つは子プロセスのstdinに接続し、もう1つはstdoutに接続します。おそらく、プロセスで入力/出力を多重化するための何らかの方法も必要です。
もう1つのオプションは、疑似端末を使用することです。これにより、疑似端末をI / Oチャネルとして持つクライアントソフトウェアとの双方向通信が可能になります。ただし、実行する手順は正確にはわかりません。これは、xtermやsshなどの他のプログラムがそのメソッドを使用していることを知っているので、私はそれを提案しているだけです。
同じ質問が以前に行われ、その答えは私が最初の段落で説明したものとほぼ同じです: popen同時読み取りと書き込み (この回答には、問題ないように見えるコードが含まれています!)
パイプはそのようには機能しません。読み取りパイプまたは書き込みパイプのみを使用できます。
また、方向により、標準入力と標準出力を同じ終点にすることはできません。それは「パイプライン作業」から来ています。誰かが開始し、他の誰かが標準入力として使用できる何かを標準出力に入れ、それを再び標準出力に入れます...
双方向通信の場合、プロセス間通信の別の方法を見つける必要があります。それが何であるかは、実装によって異なります。