0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
||||||
1 | ||||||
Передача данных между процессами (pipe)25.04.2012, 19:35. Показов 15204. Ответов 29
Метки нет Все метки)
(
Всем доброго времени суток. Обращаюсь к вам с вопросиком. Передо мной стоит задача написать код, который:
1. Создавай процесс 2. организовывал между нами pipe 3. Передавал информацию от родительского процесса дочернему. Все хорошо, если бы не одно НО...Необходимо использовать ключи: -i-ввод информации в файл (родителем). Если ключ не указан то стандартный ввод с клавиатуры -o-вывод информации в выходной файл дочерним процессом -r-перенаправление потока ошибок в прежде созданный текстовый файл (допустим list.txt) ключи задаются при запуске программы, т.е. пример ./a.out -i inputfile-здесь используется входной с файл с информацией для передачи дочернему процессу Начала писать код:
Я так полагаю что дальше я создаю pipe, создаю процесс pid=fork и проверяю если pid>0, то что дальше делать????У меня есть переменные input и output нужно их как то использовать в зависимости от того дочернийй или родительский это процесс ПОМОГИТЕ реализовать этот дальнейший код
0
|
25.04.2012, 19:35 | |
Ответы с готовыми решениями:
29
Переключение между процессами Обмен данными между процессами
|
Каратель
![]() |
|
25.04.2012, 20:15 | 2 |
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
25.04.2012, 20:24 [ТС] | 3 |
Ссылки на данные файлы это немного не то что мне нужно. у меня работа с ключами. в зависимости от которых я создала переменные input и output которые изменяются в зависимости от ключа. Далее необходимо после форка распараллелить эти процессы:родитель должен что то писать а дочерний процесс что то читать. Нужно что бы поддерживался и ввод с клавиатуры и чтение из файла, а так же вывод полученных данных дочерним процессом либо на экран либо в файл. Не могу организовать это
0
|
Модератор
![]() ![]() ![]() ![]() 12835 / 7571 / 1765
Регистрация: 25.07.2009
Сообщений: 13,968
|
|
28.04.2012, 13:48 | 4 |
Функция strcmp() возвращает 0, если строки одинаковые, условие не верно задано.
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
28.04.2012, 17:13 [ТС] | 5 |
Мой вопрос был не в этом. а совсем в другом. что после цикла делать?
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
28.04.2012, 19:48 | 6 |
вызываешь pipe, после этого делаешь fork. Для каждого процесса закрываешь неиспользуемые дескрипторы. Пишешь со стороны родителя вывод пайпа, читаешь со стороны потомка ввод пайпа.
Разбор параметров я бы организовал с помощью getopt.
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
28.04.2012, 20:11 [ТС] | 7 |
Спасибо за совет. вот после того как я закрыла для каждого процесса дискрипторы мне необходимо сделать цикл. Я использую while. А какое условие в while брать???У меня данные передаются блоками по 1Кб. И в этом цикле будут 2 функции Read(.....), Write(...).Я только предполагаю что в цикле будет так: while ....>0 и выполнение 2 функцию Только необходимо написать условие в цикле while. Помогите с этим пожалуйста
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
28.04.2012, 20:16 | 8 | |||||
в принципе, да, только нужно еще учесть, что read может вернуть -1 при ошибке чтения, так что хорошо бы еще этот случай учесть:
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
||||||
03.05.2012, 16:24 [ТС] | 9 | |||||
Написала полный код моей программы:
Вопросик есть еще: мне еще нужно выводить стандартный поток ошибок в файл log.txt предварительно созданный, как это сделать???
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
03.05.2012, 16:27 | 10 |
выводи все ошибки (например, как в строке 26) в файловый дескриптор fd1, если он открыт.
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
03.05.2012, 16:28 [ТС] | 11 |
Дак я не знаю как, можешь примерчик написать
Добавлено через 41 секунду как проверить открыт ли файловый дискриптор???
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
03.05.2012, 16:31 | 12 | |||||
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
03.05.2012, 16:37 [ТС] | 13 |
Я не понимаю как это реализовать
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
03.05.2012, 16:38 | 14 |
Nastya19kiss, читай книжки, разбирайся; что я-то могу сделать, если ты не можешь написать простое условное выражение?
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
03.05.2012, 16:39 [ТС] | 15 |
fd1=STDERR_FILENO - я правильно поняла пункт 2 Вашего сообщения?
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
03.05.2012, 16:40 | 16 |
Nastya19kiss, да. Но это только если не указан аргумент -r
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
||||||
03.05.2012, 16:46 [ТС] | 17 | |||||
А если я добавлю в программу условие типа
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
03.05.2012, 16:48 | 18 |
Nastya19kiss, еще раз забудешь проставить тег [C][/C] у кода — получишь карточку
нет конечно, ты ведь указала стандартный поток ошибок
0
|
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 54
|
|
03.05.2012, 16:59 [ТС] | 19 |
Я так понимаю что не нужно использование функции dup2()?
0
|
![]() 5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
03.05.2012, 17:07 | 20 |
Nastya19kiss, нет, не нужно. Для ошибок можно сразу использовать поток, создаваемый функцией fopen
0
|
03.05.2012, 17:07 | |
03.05.2012, 17:07 | |
Помогаю со студенческими работами здесь
20
Обмен данными между процессами с использованием сообщений Вызовы read/write в цикле между процессами Процессы, общие файлы и синхронизация между процессами Передача данных между процессами. Использование каналов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
|||||
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
|
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
|
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность
В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
|
Как решать конфликты объединения (merge) в Git
bytestream 22.01.2025
Что такое конфликты слияния
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках. . .
|
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
|
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
|
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
|
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. )
Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
|
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
|
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
|
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
|
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
|