私はfork()とexecvp()を使用して、プロセスが正しく機能するために対話型端末に接続されていると信じる必要があるプロセスを生成しています。
スポーンしたら、プロセスからのすべての出力をキャプチャし、プロセスに入力を送信できるようにします。
psuedo-ttysがここで役立つのではないかと思います。誰かがこれを行う方法についてのスニペットを持っていますか?
forkpty() を呼び出したいとします。マニュアルページから:
#include <pty.h> /* openpty および forkpty の場合 */
pid_t forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp);
-lutil でリンクします。
forkpty() 関数は、openpty()、fork()、および login_tty() を組み合わせて、疑似端末で動作する新しいプロセスを作成します。疑似端末のマスター側のファイル記述子は amaster に返され、NULL でない場合はスレーブのファイル名が name に返されます。termp および winp パラメータは、NULL でない場合、疑似端末のスレーブ側の端末属性とウィンドウ サイズを決定します。
親プロセスは、forkpty が「amaster」に格納するファイル記述子から読み書きすることにより、子プロセスと対話します。これは、マスター疑似端末デバイスと呼ばれます。子は、スレーブ疑似端末デバイスに接続されている stdin と stdout と対話するだけです。
「expect」というパッケージを使用する必要があります。tcl (発音はくすぐり) と呼ばれるスクリプト言語を使用します。
Expectは Tcl 経由での使用について既に言及されていますが、C ライブラリとして扱い、ここに記載されている API を呼び出すことで、Tcl なしで使用することもできます。