|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
Взаимодействие процессов14.12.2011, 13:03. Показов 6251. Ответов 27
Метки нет (Все метки)
Подскажите пожалуйста как мне наладить взаимодействие между двумя процессами через каналы.
Вот допустим есть у меня два процесса которые отображают данные через mmap в один файл. А как мне наладить взаимодействие между ними? Как заставить например второй процесс принимать данные из этого mmap, ну вот чтобы он ожидал пока там не появиться сообщение и печатал его сразу после того как оно там появляется. Как заставить его следить за этим каналом между потоками? Ну и вопрос на засыпку: зачем козе баян, те зачем мне mmap если я и так могу средствами си писать данные в файл, закрывать файл, а во втором процессе в это время открывать файл и считывать данные с файла и тоже закрывать его. Добавлено через 3 минуты О том что такое mmap читал здесь так что отталкиваюсь от тех данных.
1
|
|
| 14.12.2011, 13:03 | |
|
Ответы с готовыми решениями:
27
Взаимодействие процессов. Сигналы
Взаимодействие процессов |
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 14.12.2011, 14:26 [ТС] | |
|
talis, ну я написал 5 раз слово процесс что как-бы намекает
![]() Немного вник в суть пока читал википедию: оказывается этот mmap держит всё в оп, а запись производит уже когда закрывать файл, хотя как именно нужно закрывать файл через этот mmap надо ещё сейчас разобраться. Также я немного уточнил своё задание: оно подразумевает создание одного процесса, создание второго из первого (через exec, как мне сказала преподша, и передачу в виде параметра имени моего файла что используется в mmap в первом процессе). Дальше как я понимаю нужно открыть в этом mmap один и тот же файл в двух процессах ну и как-то наладить взаимодействие между процессами, например чтобы второй процесс каждые 5 секунд проверял не изменилось ли содержимое mmap и если изменилось то печатал. Но это всё теория и это всё на словах у меня, сейчас попробую на деле с виртуалкой как-то реализовать свои идеи и проверить правильно ли я понял этот mmap. Добавлено через 3 минуты talis, я уже понял почему Вы засомневались между процессами или потоками: в той теме я упомянул потоки так как не сильно вчитывался в задание к сл. лабораторной, теперь вот прочитал и понял что мне нужно делать взаимодействие между процессами. Взаимодействие же между потоками в принципе можно наладить абсолютно так же, хотя это не рентабельно так как между потоками у нас есть общая память и гораздо проще обмениваться данными через глобальные переменные и передачу указателей на память при создании потоков.
0
|
|
|
|
||||||||||||||||||||||||||||
| 14.12.2011, 14:41 | ||||||||||||||||||||||||||||
|
Gepar, пока я вникал в суть вопроса, вы набросали это небольшое сообщение :-) Не знаю, нужен ли вам именно mmap. Я немного изучил тему файлов-очередей в POSIX (FIFO по-другому, или именованные каналы). Вот что удалось набросать:
Добавлено через 3 минуты Добавлено через 1 минуту А чтобы чтение не блокировалось, теоретически можно использовать select. Не знаю, будет ли оно работать с файлами-очередями, но с сокетами у меня прокатывало.
2
|
||||||||||||||||||||||||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 14.12.2011, 14:43 [ТС] | |
|
talis, mkfifo тоже надо, это следующий пункт но сейчас я пытаюсь разобраться с первым: c mmap так как я пока что не могу найти как писать и читать данные именно с использованием mmap, или же когда я создаю этот канал через mmap и передаю дескриптор файла то операции read и write автоматически начинают использовать существующий канал
0
|
|
|
|
|||||||||||
| 14.12.2011, 14:55 | |||||||||||
|
Gepar, судя по манам, нет. mmap проецирует содержимое файла на какую-то часть виртуального адресного пространства вашего процесса. Думаю, вам нужно писать и читать по смещениям относительно начала проецированной области, плюс, возможно, как-то синхронизировать содержимое памяти с файлом. Если возвращённый адрес хранится в void * addr, то:
0
|
|||||||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 14.12.2011, 15:07 [ТС] | |
|
Пока пытаюсь использовать mmap возник вопрос: как задать флаги для открытия файла через open так чтобы он создавался либо открывался, если написать O_CREATE | O_TRUNC то он если файл уже существует не открывается и выдаёт ошибку.
Добавлено через 4 минуты Хм, вроде получилось читать данные с mmap, простенько, без указания размера страницы памяти я конечно сделал, но сработало.
0
|
|
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
| 14.12.2011, 15:09 [ТС] | |||||||||||
|
В общем-то я создал mmap для записи вот так
1
|
|||||||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 14.12.2011, 15:11 [ТС] | |
|
talis, ну open возвращает дескриптор в виде int, а fopen в виде FILE, не знаю понравиться ли mmap получать дескиптор в виде FILE, сейчас попробую.
0
|
|
|
|
||||
| 14.12.2011, 15:13 | ||||
Добавлено через 24 секунды
1
|
||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||
| 14.12.2011, 15:16 [ТС] | |||
|
Добавлено через 50 секунд Добавлено через 1 минуту Так, теперь нужно разобраться с вызовом exec и передачей в виде его параметра имени файла что я использую в mmap чтобы другой процесс знал что ему жевать.
0
|
|||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||
| 14.12.2011, 15:22 [ТС] | ||
|
1
|
||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||||||
| 14.12.2011, 18:05 [ТС] | ||||||||||||
|
В общем-то у меня есть два файла, допустим a.out пишет данные в mmap, b.out читает эти данные. Мне нужно в начале a.out запустить как-то b.out с передачей ему параметров, как это сделать? Всё равно через что, я по поводу exec читаю и там написано что оно создаёт копию процесса, одногрупник говорил что там как-то хитро потом надо заменять эту копию на нужный процесс но я не знаю как именно это реализовать, а вообще почему нет ничего такого чтобы просто запустить процесс/файл на выполнение, какой-то там run чтоли. Ну только без системного вызова из консоли когда на экран будет выведено что-то типа "./b.out параметр1 параметр2" - это будет плохой вариант Добавлено через 31 минуту Какой же странный этот линукс, просидел пол часа только чтобы найти странность: если я пытаюсь вызвать другой процесс через execv() после того как открыл какой-то файл то вызов игнорируется! Вот зачем такое сделано? Ведь если поместить вызов execv() до открытия файла то всё хорошо, а если сразу же после того как файл был открыт то ничего не получается. Добавлено через 1 час 11 минут Экспериментирую с execv, только мне интересно как он определяет что передавать в argc создаваемому процессу? Так как в итоге он у меня создаёт процесс с 6ю аргументами, тогда как второй аргумент при создании процесса через него у меня char* arg[3]. Добавлено через 20 минут И всё же я никак не могу понять почему если сделать так
А если сделать так
0
|
||||||||||||
|
Заблокирован
|
|
| 14.12.2011, 18:19 | |
|
что в errno?
0
|
|
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 14.12.2011, 19:14 [ТС] | |
|
LosAngeles, Bad address.
0
|
|
|
|
|||||||||||||
| 14.12.2011, 19:22 | |||||||||||||
|
Маны на английском
argv is an array of argument strings passed to the new program. By convention, the first of these strings should contain the filename associated with the file being executed. envp is an array of strings, conventionally of the form key=value, which are passed as environment to the new program. Both argv and envp must be terminated by a NULL pointer.
Перевод
argv - это массив строк-аргументов, передаваемых новой программе. По соглашению, первая из этих строк должна содержать имя файла, ассоциированного с исполняемой программой. envp - это массив строк, по соглашению в виде ключ=значение, которые передаются запускаемой программе как переменные окружения. И argv, и envp должны завершаться нулевым указателем (NULL).
Пример из манов
1
|
|||||||||||||
| 14.12.2011, 19:22 | |
|
Помогаю со студенческими работами здесь
20
Взаимодействие процессов Взаимодействие процессов / WinAPI Взаимодействие двух процессов Взаимодействие процессов в Windows Взаимодействие 2-ух процессов через разделяемую память Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|