本物を開くプロキシプロセスを作りたい。
Linuxの名前espeak
をespeak_real
に、アプリの名前をに変更した場合のようにespeak
。
espeak
開きespeak_real
、出力を取得します。
私は次のことを可能にしたい:
- STDINをコンソールに出力します
- STDINを別のプロセスのSTDINに出力します
- 2番目のプロセスのSTDOUTを出力します
私はCでそれをやろうとしています(生のbashでも可能だと思います)。
私はあなたが何をしているのか正確にはわかりませんが、、、の組み合わせのようでfork
、exec
それpipe
をdup2
行う必要があります。
app
パイプに接続されたファイル記述子のペアを取得するために使用できますpipe
(一方に書き込まれたものは他方から読み取られます)。
それからそれはフォークすることができます、そして子供はすることができexec
app_real
ます。
ただし、との間fork
でexec
は、dup2
最初に0,1と2に変更する(ただし、実際の0,1,2を閉じる)ファイル記述子を変更するために使用できます。
短いコード例:
int pipe_fds[2];
pipe(pipe_fds);
if (fork()==0) {
// Child
close(fds[1]); // This side is for the parent only
close(0); // Close original stdin before dup2
dup2(fds[0],0); // Now one side of the pipe is the child's stdin
close(fds[0]); // No need to have it open twice
exec(...);
} else {
// Parent
close(fds[0]); // This side is for the child only
write(fds[1],data,len); // This data goes to the child
}