|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
||||||||||||||||
Неименованные пайпы18.10.2017, 17:37. Показов 982. Ответов 15
Метки нет (Все метки)
Не совсем работают пайпы. Пайп для приёма данных от родителя в дочернюю не работает, а пайп приёма данных от дочерней в родительскую программы работает.
На вход дочерней программы приходят адреса пайпов для общения с родителем. По самому пайпу приходит целочисленное число в дочернюю программу, возвращается тоже целочисленное в родительскую. Родительская программа:
0
|
||||||||||||||||
| 18.10.2017, 17:37 | |
|
Ответы с готовыми решениями:
15
Неименованные каналы POSIX Пайпы Пайпы и WaitForMultipleObjects |
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
||
| 18.10.2017, 22:56 [ТС] | ||
|
В этом ветвлении мы находимся в дочернем процессе и закрываем адреса каналов для записи Родительский->Дочерний (потому что в дочерней программы мы должны считывать из этого пайпа) и чтения Дочерний->Родительский (в дочерней программе мы должны записывать в этот пайп).
0
|
||
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
||
| 19.10.2017, 21:08 [ТС] | ||
|
Пайп, первый индекс которого четен, для записи из родительского в дочерний. Пайп, первый индекс которого нечетен, для записи из дочернего в родительский. В close мы закрываем адреса, которые дочернему/родительскому процессу не нужны. (Насколько я понял из лекций и материалов в сети).
0
|
||
| 19.10.2017, 21:35 | ||||
|
Т.е. потомок тут И зачем делать вдвое больше пар дескрипторов для каналов, нежели у нас потоков. Т.е. при 5 детях мы создаём 20 дескрипторов(10 пар)
0
|
||||
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
|
| 19.10.2017, 22:13 [ТС] | |
|
i идет с нуля же.
i = 0 close(fd[0][1]); close(fd[1][0]); Они относятся к одной паре дескрипторов для общения первого дочернего процесса с родителем i = 1 close(fd[2][1]); close(fd[3][0]); А вот эти два относятся к другой паре дескрипторов для общения второй дочерней программы с родителем и так далее. Надеюсь, логика программы стала понятней. Т.к. процессов дочерних 5, следовательно нужно 10 каналов для взаимного общения всех дочерних процессов с родителем, а поскольку канал имеет два дескриптора для чтения и записи, получается массив fd имеет 20 ячеек.
0
|
|
| 19.10.2017, 22:37 | ||
|
Нет.
Первая пара: fd[0][0] и fd[0][1]; вторая fd[1][0] и fd[1][1] Простейший пример тут https://studopedia.org/3-107577.html смотрим второй - там у родителя только один потомок, и как видим только один канал, а не два. А вот сам канал состоит из двух файловых дескрипторов.
0
|
||
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
|||
| 19.10.2017, 22:43 [ТС] | |||
|
upd: я не спорю с тем, что могу неверно пользоваться терминологией.
0
|
|||
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
||
| 19.10.2017, 22:51 [ТС] | ||
|
Если я не прав, укажите на это пожалуйста, где ошибка в моих рассуждениях.
0
|
||
| 19.10.2017, 23:09 | |||
|
Теперь я вообще ничего не понял. Задание: Надо различать программу и процесс. fork() создаёт процесс - точную копию исходного с почти всем наследием, выполнение которого начинается с самого вызова fork(); exec***() выполняет внешнюю программу Если в лабе нужны именно программы, а не процессы, то тут именованые каналы mkfifo() - для создания головной программой и open() - для открытия дочерней
0
|
|||
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
|||
| 19.10.2017, 23:17 [ТС] | |||
0
|
|||
| 19.10.2017, 23:23 | ||||
|
Это два отдельных экзешника, никак между собой не связанных. Потому каналы именованные.
0
|
||||
|
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 8
|
|
| 19.10.2017, 23:26 [ТС] | |
|
0
|
|
| 19.10.2017, 23:40 | |
|
"внешняя программа" - это и есть "неродственный процесс", т.е. последовательность кода, никак не связанная с родителем(нет, есть конечно getppid() и прочее). У них изначально нет общей памяти, нет общего кода, нет общих открытых дескрипторов и п.р. Всё это надо создавать.
Зачем плодить толпу родственных_процессов (посредством fork()), и затем налаживать к-то обмен с родителем, что бы потом из них только запускать неродственный_процесс?
1
|
|
| 19.10.2017, 23:40 | |
|
Помогаю со студенческими работами здесь
16
Именованные и неименованные каналы
Создание дочерних процессов. Пайпы Как использовать неименованные объекты? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|