freopen
не принадлежит этому коду вообще. Вместо этого вы должны сделать что-то вроде:
FILE *tmp = tmpfile();
if (!(pid=fork())) {
dup2(fileno(tmp), 1);
close(fileno(tmp));
execlp(...);
_exit(1);
}
wait(&status);
/* read from tmp */
Однако было бы намного лучше использовать трубу , если это возможно.