Как разветвить дочерний процесс и перенаправить все выходные данные программы на дочерний процесс?

Я пишу одну задачу, которая перекрывает другую программу printf().Он разветвляет один дочерний процесс и перенаправляет все выходные данные программы на дочерний процесс. Код ниже то, что я написал, который еще не запущен, и мне нужно добавить эту функцию на нем, я думаю.

int printf(char* format, ... )
{
    int res;
    static void *(*mallocp)(size_t size);
    char *error;
    if (!mallocp) {
    mallocp = dlsym(RTLD_NEXT, "printf");
        if ((error = dlerror()) != NULL) {
            fputs(error, stderr);
            exit(1);
        }
    }
    va_list args;
    va_start(args, format);
    res=mallocp(format, args);
    va_end(args);
    return res;
}

Я нахожу одно похожее решение, но немного другое. Перенаправление stdin и stdout в child in c
Я действительно не знаю, после того, как я вилка один дочерний процесс и настроить трубу хорошо, как я могу позволить родителям процесс идти дальше с системой «printf»mallocp, чтобы дать stdout, который должен быть перенаправлен на дочерний процесс. (может быть, что-то вроде system("./calc/calc ");в этом примере) я новичок в этой области. Не могли бы вы сказать мне ?

Кстати, я не знаю, скучаю ли я по реализации всего процесса, потому что это один вопрос, и я не знаю официального решения.

1 ответ

  1. Используйте » dup2 «и замените» stdout «на» pipe».

    Я предполагаю, что ваша труба настроена хорошо от родителя до потомка.

    Тогда ребенок может читать с другого конца.

    dup2 (fd, 1); / / 1 для stdout

    Второй вариант: (в случае если ваша труба не хороша больше)

    Использование общей памяти.

    Создание объекта общей памяти.

    Перенаправление STDOUT из родительской памяти в общую.

    Ребенок может это видеть.

    вот пример
    http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/shm/example-1.html