Краткий ответ: нет, "repiping" pipe1 не повлияет на предыдущие разветвленные процессы, которые использовали pipe1, но лучше объявить 3 pipe и pipe () перед fork () "ИНГ.
Длинный ответ: Чтобы понять почему, давайте сначала посмотрим, что происходит, когда вы создаете «трубу», а затем, что происходит, когда вы «разворачиваете» процесс.
Когда вы вызываете pipe (), он «создает канал (объект, который допускает однонаправленный поток данных) и выделяет пару файловых дескрипторов. Первый дескриптор подключается к концу чтения канала; второй подключается к концу записи».(Это со страницы man pipe)
Эти файловые дескрипторы сохраняются в массиве int, который вы передали в него.
Когда вы вызываете fork (), «Новый процесс (дочерний процесс)»должна быть точной копией вызывающего процесса "(Это со страницы man fork ())
Другими словами, родительский процесс создаст дочерний процесс, и у этого дочернего процесса будет собственная копия данных.
Таким образом, когда дочерний элемент 3 вызывает pipe (pipe1), он будет создавать новый канал и сохранять дескрипторы новых файлов в своей собственной копии изпеременная pipe1, без изменения какого-либо другого pipe1 процесса.
Несмотря на то, что вы можете обойтись только объявив две переменные канала и просто вызвав pipe () в дочернем элементе 3, это не очень легко прочитать, а другие (включая вас) будут сбиты с толку позже, когда им придетсяпосмотрите на ваш код.
Для получения дополнительной информации о fork () и pipe () посмотрите http://beej.us/guide/bgipc/output/html/multipage/index.html