Допустим, у меня есть программа под названием «parent», которая использует fork () и execl () для запуска другой программы под названием «child», и я хочу сохранить связь между этими двумя программами. Похоже, что лучшим способом сохранить эту связь будет использование неназванных каналов. Легко найти документацию и примеры о требованиях на стороне «родителя», но я не нашел того же на стороне «потомка».
Например, я думаю, что это руководство хорошо, но я не показываю, что мне нужно делать в программе, запущенной exec для обеспечения связи между обеими программами, я должен использовать dup () в «parent», чтобы поделиться дескрипторами но кто я правильно обращаюсь к трубе на стороне ребенка, чтобы установить связь между обоими ?:
http://tldp.org/LDP/lpg/node11.html
В статье дочерний процесс использует dup
а также dup2
(dup2
лучше) настроить один из файловых дескрипторов в качестве стандартного ввода.
Процесс похож на стандартный вывод (вам понадобится отдельный pipe
и связанные файловые дескрипторы).
Затем родитель может общаться с stdio ребенка, читая и записывая его в конец канала (ов).
Когда ребенок exec
ed, эти файловые дескрипторы наследуются, поэтому одни и те же конечные точки канала останутся стандартным вводом и выводом в дочернем процессе.
Другими словами, если вы настроили дескрипторы файлов с dup
/dup2
как в статье, вам не нужно делать ничего особенного в exec
Ed процесс, вы можете просто читать и писать на STDIO.
Других решений пока нет …