想要在关闭使用freopen打开的文件后写入stdout

时间:2011-06-27 23:07:51

标签: c stdout freopen

我正在使用fork()。但是,在执行fork()之前,我使用a.txt打开文件(例如freopen)进行写入。现在,子进程会将execlp的输出重定向到a.txt。终止子进程后,父进程将关闭a.txt。现在,父流程如何阅读a.txt并在stdout中显示一些信息?

2 个答案:

答案 0 :(得分:1)

如果父进程使用freopen(3)打开文件,则可以使用rewind(3)库调用将流的指针重新挂起到文件的开头,以便与{{1}一起使用或fread(3)或您想要使用的任何API。

答案 1 :(得分:1)

freopen根本不属于此代码。相反,你应该做类似的事情:

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

然而,如果可能的话,使用管道实际上要好得多。