-2

本物を開くプロキシプロセスを作りたい。

Linuxの名前espeakespeak_realに、アプリの名前をに変更した場合のようにespeakespeak開きespeak_real、出力を取得します。

私は次のことを可能にしたい:

  • STDINをコンソールに出力します
  • STDINを別のプロセスのSTDINに出力します
  • 2番目のプロセスのSTDOUTを出力します

私はCでそれをやろうとしています(生のbashでも可能だと思います)。

4

1 に答える 1

1

私はあなたが何をしているのか正確にはわかりませんが、、、の組み合わせのようでforkexecそれpipedup2行う必要があります。

appパイプに接続されたファイル記述子のペアを取得するために使用できますpipe(一方に書き込まれたものは他方から読み取られます)。
それからそれはフォークすることができます、そして子供はすることができexec app_realます。
ただし、との間forkexecは、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
}
于 2012-05-06T20:17:35.753 に答える