|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||||||||||||||||
С++ под Linux, процессы fork() и каналы30.05.2013, 09:31. Показов 5224. Ответов 21
Метки нет (Все метки)
Вот такая штука... Нужно, так сказать, организовать общение между процессами через полудуплексный неименованный канал =)
Научился передавать между процессами одно чилсо... Но не получается передать массив =( Вот что делаю, когда передаю одно число:
0
|
||||||||||||||||
| 30.05.2013, 09:31 | |
|
Ответы с готовыми решениями:
21
Fork() процессы
Процессы и каналы |
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
| 30.05.2013, 09:53 | ||||||
|
Во write как минимум.
1
|
||||||
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||||||||||||
| 30.05.2013, 11:04 [ТС] | ||||||||||||
0
|
||||||||||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
| 30.05.2013, 11:07 | ||||||
1
|
||||||
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
|||||||||||||||||
| 30.05.2013, 14:05 [ТС] | |||||||||||||||||
|
А вот второе я не знаю... Я хотел записать в fd[1] информацию и из fd[0] потом ее считывать, &С это, как я пологаю, указатель на начала моего массива и sizeof(C) это размер, который я буду записывать... Что не так? =) ну а считываю я так:
Вот еще такой вопрос... Почему в функции:
0
|
|||||||||||||||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 30.05.2013, 14:11 | |
|
О да Вы оказывается не знаете примитивов, а взялись за пайпы. Разговор бессмысленен пока вы не прочитаете что такое:
1. Переменная. 2. Указатель. 3. Массив. 4. Функция. 5. Передача переменных/массивов в функцию (по значению, указателю, ссылке)
1
|
|
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||
| 30.05.2013, 14:16 [ТС] | ||
|
Что именно я не так сделал в коде? =)
0
|
||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 30.05.2013, 14:25 | |
|
Почитайте, это долго расписывать. Тем более без данных примитивов вы вряд ли сможете что-то разработать дальше.
1
|
|
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||
| 30.05.2013, 14:58 [ТС] | ||
|
Добавлено через 5 минут Если я хочу сделать указатель на массив array я буду делать так: //опустим выделение памяти и тп. int *ptr; ptr = array; или ptr = &array[0]; Я же тоже самое делаю... В функции есть массив С, его я возвращаю и в main у меня есть указатель *C и собственно C=input_C_elements(c,A,B,amount); это тоже самое что и ptr = array;.... что не так? =)
0
|
||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
| 30.05.2013, 15:16 | ||||||
|
1. то что функция input_C_elements, возвращает указатель. В Вашем случае указатель на первый элемент массива.
А функция write принимает указатель на область данных. Это то что Вы написали.
Запиши данные в файловый дискриптор fd[1] из переменной С размером с переменную С. Так вот переменная С это УКАЗАТЕЛЬ и &c это взятие адреса указателя, а sizeof(C) это sizeof(void*) 2. Функция input_C_elements принимает ПО ЗНАЧЕНИЮ amount. Советую все таки прочитать, то что я написал.
1
|
||||||
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
|
| 30.05.2013, 16:41 [ТС] | |
|
Блин.... Ну нифига не выходит...
0
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
| 30.05.2013, 17:49 | ||||||
1
|
||||||
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||||||
| 30.05.2013, 20:17 [ТС] | ||||||
|
Но я так и записываю в канал... но ничего не пишется:
0
|
||||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 30.05.2013, 22:12 | |
|
1
|
|
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
|
| 31.05.2013, 06:36 [ТС] | |
|
0
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 31.05.2013, 12:26 | |
|
Хватит кадра стека. Да поможет.
1
|
|
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||||||
| 31.05.2013, 12:35 [ТС] | ||||||
|
Вот такая штука в общем... Вот код:
Сформировать массив, элементами которого являются целые числа больше А, меньше В и не равные С1, С2, ... Сn. Найти среднее арифметическое элементов полученного массива. Входные данные: число А, число Б, произвольное количество чисел С1, С2, ... Сn. Использовать не менее четырех процессов для решения задачи. Сегодня общался с преподователем, она сказала, что не знает почему у меня не пишется или не читается и посоветовала писать в канал поэлементно, этим я и займусь, НО я очень хочу разобраться, почему с массивом такая у меня проблема...
0
|
||||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||
| 31.05.2013, 13:01 | ||
|
Уточняющий вопрос. Использовать потоки или процессы? Дело в том что это разные вещи, с точки зрения программирования в общем, просто linux имеет свое мнение и релизацию данных вещей. Какая цель "не менее четырех процессов для"? Распараллелить задачу? Или Именно научиться использовать IPC (межпроцессорное взаимодействие)? Добавлено через 19 минут п.с. И определитесь на каком языке Вы пишите. Си или С++
1
|
||
|
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
|
||
| 31.05.2013, 14:20 [ТС] | ||
|
А на счет потоков или процессов... Я понял задачу так... Есть программа, к примеру как моя, написанная на СИ/С++ и всю программу будет выполнять родительский процесс, но я разбиваю программу на 4 fork(), таким образом имею дочерние процессы (выполнил условие "не менее четырех процессов для"). Но, так как, по завершению дочернего процесса, другой начавшийся дочерний процесс или даже тот же родительский процесс не будут знать о том, что произошло в выполнившемся дочернем процессе... Я имею ввиду вот что... Если я в родительском процессе создам переменную m и скажу что она равно нулю, а затем в дочернем процессе присвою переменной m значение 5, то по окончанию дочернего процесса, в родительском переменная m останется быть равна 0... Поэтому нужны каналы, чтоб сообщить о изменениях и тп. Я правильно рассуждаю? =)
0
|
||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 31.05.2013, 17:00 | |
|
Нет вы не поняли. В Linux подобных OS потоки реализованы через процессы. И запуск 4 потоков, это запуск 4 процессов.
В программировании под процессом понимают выполнение программы с использованием отдельной выделенной области памяти. В то время как поток может использовать ту же память что и породивший его процесс. Как-то так. Так вот какая академическая задача стоит? Научиться использовать межпроцессорное взаимодействие или уметь распаралеливать задачу?
1
|
|
| 31.05.2013, 17:00 | |
|
Помогаю со студенческими работами здесь
20
Процессы и именованные каналы Принцип работы отладчика в Linux и fork() Клиент-сервер TCP для Linux с fork Именованные каналы в Linux Linux pipes(каналы) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|