Программно захватывает распечатки из дочернего процесса в родительском, чтобы они не переходили в стандартный вывод - PullRequest
1 голос
/ 26 апреля 2011

У меня есть программа C ++, которая работает на HPUX и Linux.Моя программа создает 2 дочерних процесса, родитель ожидает завершения обоих дочерних процессов.Когда я выполняю свою директорию запуска формы программы следующим образом, запускаю> myProgram

Я получаю отпечатки как от дочернего процесса, так и от родительского процесса.Поэтому мне нужно как-то остановить мой дочерний процесс для печати в окне командной строки.После завершения дочернего процесса я хотел бы включить печать, чтобы родитель мог отображать результаты.

Кто-нибудь знает, как включить и выключить печать?

1 Ответ

1 голос
/ 26 апреля 2011

Получая вдохновение от этого ответа :

#include <stdio.h>

main()
{
    int    fd;
    fpos_t pos;

    printf("printing to stdout enabled\n");

    fflush(stdout);
    fgetpos(stdout, &pos);
    fd = dup(fileno(stdout));

    // Standard output redirected to the null device
    freopen("/dev/null", "w", stdout);

    f(); 

    // Standard output restored to its previous fd (the screen)
    fflush(stdout);
    dup2(fd, fileno(stdout));
    close(fd);
    clearerr(stdout);
    fsetpos(stdout, &pos);        /* for C9X */

    printf("printing to stdout enabled again\n");
}

f()
{
    printf("message sucked away by /dev/null");
}
...