|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
Взаимодействие процессов14.12.2011, 13:03. Показов 6147. Ответов 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-ух процессов через разделяемую память Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|