0

を使用してfork()います。ただし、 を実行する前に 、書き込みに使用してファイル (たとえば ) をfork()開きます。これで、子プロセスは の出力をにリダイレクトします。子プロセスの終了後、親プロセスは終了します。では、親プロセスはどのように情報を読み取って表示できますか?a.txtfreopenexeclpa.txta.txta.txtstdout

4

2 に答える 2

1

親プロセスが でファイルを開いた場合freopen(3)rewind(3)ライブラリ呼び出しを使用して、ストリームのポインタをファイルの先頭に巻き戻し、fread(3)または使用しfgets(3)たい API で使用できます。

于 2011-06-27T23:13:11.630 に答える
1

freopenこのコードにはまったく属していません。代わりに、次のようにする必要があります。

FILE *tmp = tmpfile();
if (!(pid=fork())) {
    dup2(fileno(tmp), 1);
    close(fileno(tmp));
    execlp(...);
    _exit(1);
}
wait(&status);
/* read from tmp */

ただし、可能であれば、パイプを使用する方が実際にははるかに優れています。

于 2011-06-27T23:13:43.203 に答える