LINUX.ORG.RU

Информация о запущенных приложениях, использующих библиотеку.


0

1

Есть библиотека (моя), скажем so.so. Запустили три приложения, которые ее используют. Я хочу сделать механизм, позволяющий приложениям, использующим эту же копию библиотеки общаться друг с другом посредством сообщений типа таких (ну или таких, имею в виду вообще формат, а не конкретно эти).

Что порекомендуете?

Общий механизм - приложение дергает функцию либы, которая сообщает, какие еще приложения используют ее (я думаю либо на mutex'ах это сделать либо на файлах в директории где-то в /tmp), потом из полученного массива берет индекс программы, с которой нужно контактировать и дергает функцию so.so/sendmessage(index, data)

Каким механизмом (кроме echo "$data" > /tmp/tosend_$(index) это можно сделать?

Так как либа твоя, то просто добавь в либу функцию register_lib_user(), которую будет дергать каждая программа, использующая ее. Эта функция возвращает int - ИД приложения.

И реализуй функцию в стиле void send_msg(int app_id, const struct msg *msg) и, соответственно, void recv_msg(int *app_id, struct *msg);

bk_ ★★ ()
Ответ на: комментарий от bk_

Проблема в том, что каждое приложение при загрузке либо будет создавать в памяти свои копии всех глобальных переменных либы и области памяти. Т.е. если у меня в либо есть char * fff = «dfdf», то при запуске двух приложений в памяти будет dfdf два раза и первое приложение не будет иметь доступа к dfdf второго и наоборот.

sambist ★★ ()
Ответ на: комментарий от sambist

Действительно, моя ошибка, ты прав.

Наверное, самый простой вариант - использовать что-то в стиле DBus. Более сложно - реализовать общение на shared memory.

bk_ ★★ ()

Зачем такие извращения, если всё уже давно придумано и обкатано?

Hint: IPC Message Queues

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Воооот, спасибо, почитаю, потыкаю. Я ж не знал, что такое есть.

sambist ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.