我正在使用fork()
。但是,在执行fork()
之前,我使用a.txt
打开文件(例如freopen
)进行写入。现在,子进程会将execlp
的输出重定向到a.txt
。终止子进程后,父进程将关闭a.txt
。现在,父流程如何阅读a.txt
并在stdout
中显示一些信息?
答案 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 */
然而,如果可能的话,使用管道实际上要好得多。