![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
abskura |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 21.11.2009 Репутация: 1 Всего: 1 |
Есть такое вот задание:
Написать программу, создающую и заполняющую текстовый файл. Информацию этого текстового файла через межпроцессный канал передать в параллельный процесс. В нем после каждого символа текста вписать в файл порядковый номер и передать через межпроцессный канал в параллельный процесс, где разделить каждый символ со своим номером пробелом. Из текущего процесса переслать полученную информацию в исходный процесс и там вывести на печать. Предусмотреть возможность прерывания от клавиатуры. Мне не понятно как реализовать вот это действие: " Из текущего процесса переслать полученную информацию в исходный процесс и там вывести на печать." Разве исходный процесс не будет уже выполнен? И если нет, то как к нему обратится. Читая про fork() и pipe() я ни где не встречал примеров с такими вот кульбитами, туда-сюда, между процессами. Может, у кого ссылка есть какая-нибудь, где подобное взаимодействие рассматривается? Я пока ни чего не нашёл, везде стандартный пример: создаём канал, создаём новый процесс форком, в процессе сыне что-то пишем в канал, в процессе отце читаем, и все. |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
20$
|
|||
|
||||
abskura |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 21.11.2009 Репутация: 1 Всего: 1 |
GrayCardinal, да давайте полтинник сразу, чего мелочиться-то)
У вас по теме ответ есть? |
|||
|
||||
svlary |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
||||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
Такие вещи обычно не рассматривают, потому что двухсторонняя передача через каналы чревата ошибками, очень легко получить deadlock на блокирующихся операциях. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
abskura |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 21.11.2009 Репутация: 1 Всего: 1 |
svlary:
То, что два пайпа, это понятно, но всё равно спасибо). Мне было не понятно поведение процессов, но теперь разобрался). MAKCim: вот это ответище). Спасибо, за такую подробную схему) Void:
Спасибо, будем знать. |
||||
|
|||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
![]() man 2 pipe - это не '2 pipeа', а 'смотри pipe в секции 2' (секция 2 - системные вызовы) |
||||
|
|||||
abskura |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 21.11.2009 Репутация: 1 Всего: 1 |
Чёрд...
Но ведь в итоге действительно понадобятся два пайпа)). Так что будем считать, что мы друг друга поняли) |
|||
|
||||
abskura |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 21.11.2009 Репутация: 1 Всего: 1 |
Уважаемые, а может кто ещё подскажет как осуществить данное действие?
В нем после каждого символа текста вписать в файл порядковый номер и передать через межпроцессный канал в параллельный процесс, где разделить каждый символ со своим номером пробелом. Если прогонять массив со строкой в цикле, то после 9-го элемента начнутсся проблемы, так как пойдут числа состоящие из 2-ух цифр, а если строка достаточно длинная то потом и из 3-ёх. Листал справочник команд, не нашёл там ни чего такого для редактирования строк... Это сообщение отредактировал(а) abskura - 18.12.2009, 23:46 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Ну sprintf например
|
|||
|
||||
abskura |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 21.11.2009 Репутация: 1 Всего: 1 |
Не вполне понимаю как... На всякий случай уточню задание на примере. Есть файл с таким вот текстом, например: abcdefghijklm Нужно сначала его сделать таким: a1b2c3d4e5f6g7h8i9j10k11l12m13 А затем, таким: a 1b 2c 3d 4e 5f 6g 7h 8i 9j 10k 11l 12m 13 И каким образом тут поможет функция sprintf? Она же просто направляет данные в символьную строку. Или я чего-то не знаю о sprintf? UPD: Отбой, разобрался причём тут sprintf)). Всем спасибо, проблема решина. Это сообщение отредактировал(а) abskura - 20.12.2009, 00:05 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |