Хотите написать в стандартный вывод после закрытия файла, открытого с помощью freopen - PullRequest
0 голосов
/ 28 июня 2011

Я использую fork().Однако перед выполнением fork() я открываю файл (скажем, a.txt), используя для записи freopen.Теперь дочерний процесс перенаправляет вывод с execlp на a.txt.После завершения дочернего процесса родительский процесс закрывается a.txt.Теперь, как родительский процесс может прочитать a.txt и показать некоторую информацию в stdout?

Ответы [ 2 ]

1 голос
/ 28 июня 2011

freopen не принадлежит этому коду вообще. Вместо этого вы должны сделать что-то вроде:

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

Однако было бы намного лучше использовать трубу , если это возможно.

1 голос
/ 28 июня 2011

Если родительский процесс открыл файл с помощью freopen(3), то вызов библиотеки rewind(3) можно использовать для перемотки указателя потока на начало файла, для использования с fread(3) или fgets(3) иликакой бы API вы не хотели использовать.

...