0

我正在使用fork(). 但是,在执行之前fork(),我打开了一个 用于写入的文件(比如a.txt) 。freopen现在子进程将输出重定向execlpa.txt。终止子进程后,父进程关闭a.txt。现在父进程如何读取a.txt并显示一些信息stdout

4

2 回答 2

1

如果父进程使用 来打开文件freopen(3),则rewind(3)库调用可用于将流的指针重新缠绕到文件的开头,以便与您想使用的 API 或任何 API 一起使用fread(3)fgets(3)

于 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 回答