私はリダイレクトを自分で教えようとしています。パイプとexec()を使用して別のコンソールアプリケーションを制御する
ユーザーに整数を入力して他の整数を出力するシンプルなプログラムがあります。ユーザーが0を入力して終了するまで無期限に出力します。
私はそのプログラムのラッパーを作成しようとしていますが、将来は別のコンソールアプリケーション用のGUIラッパーかもしれません。 目的はそのプログラムと通信することです。
私の最初の考えは、パイプを使用してプロセスをフォークし、パイプをstdinと子プロセスのstdoutに設定し、次にコンソールアプリケーションをexec()した。
コンソールアプリケーションは実行されますが、通常どおり実行されるため、これまでのコードは正しく動作しません。コンソールでは出力が行きたくない場所に移動します。
main()
{
int master_to_slave[2];
int slave_to_master[2];
pipe(master_to_slave);
pipe(slave_to_master);
int pid;
if((pid=fork())==0){
close(master_to_slave[1]);
close(slave_to_master[0]);
dup2(0, master_to_slave[0]);
dup2(1, slave_to_master[1]);
char *args[] = { NULL };
execv("/home/ebach/Documents/HIWI/random.exe",args);
}
else if(pid<0){
//ALARM ALARM
}
else{
close(master_to_slave[0]);
close(slave_to_master[1]);
while(1){
char buff[16];
int rd = read(slave_to_master[0], &buff, sizeof(buff));
if(rd > 0){
buff[rd-1] = '\0';
printf("Redirected: ");
for(int i = 0; i < rd; i++){
printf("T%c", buff[i]);
}
printf("\n");
}
}
wait(NULL);
}
}
これまでのところ、コンソールアプリケーションの出力をリダイレクトすることになっています。 (あなたが見ることができるように、それは単に「リダイレクト:」を追加する必要があります。
とにかく、私はあなたが表示される場合がありますように、Cで完全に堪能ではないよ、私が障害を見つけることができません
私は「接続」しました間違っパイプ?
私が出会ったforkpty()とexec()を使用して疑似端末の使用をした別の解決策は、私はそのルートを行くべき?
感謝を任意の助けを事前に!
をさらに、正しくデュープ後、標準ストリーム上にだまされたオリジナルのFD閉じなければならない。 –
本当にありがとうございます、私の問題を解決します。 –