Qt - Несколько областей общей памяти для нескольких приложений IPC? - PullRequest
0 голосов
/ 01 мая 2011

Я немного новичок в Qt и пытаюсь понять приложения Shared Memory и что происходит, когда у вас есть несколько программ, которые используют Shared Memory, но не должны взаимодействовать.

I 'Посмотрим на эту базовую демонстрацию / пример: http://doc.qt.io/qt-5/qtcore-ipc-sharedmemory-example.html

Допустим, я занимаюсь разработкой программного приложения A и программного приложения B. Оба эти приложения используют общую память Qt и предназначены для связи друг с другом с помощью общей памяти.

Тогда предположим, что пользователь также запускает программное приложение X, которое также использует общую память Qt для каких-то других целей.Программное приложение X полностью НЕ ОТНОСИТСЯ к приложению A и приложению B.

Глядя на документацию по общей памяти Qt, я не понимаю, как ваше приложение использует общую память таким образом, чтобы отличаться от других приложений, пытающихсяиспользовать общую памятьЧто мешает приложению X отправлять данные мусора в приложение A и приложение B через общую память?

Кроме того, один большой вопрос по поводу приведенного выше примера заключается в том, что для демонстрации общей памяти Qt они используют одно приложение, которое вы запускаетене раз, и между ними происходит совместное использование памяти.Можете ли вы разработать два совершенно разных компонента программного обеспечения, которые работают вместе через общую память, или это ограничено одним приложением, в котором открыто несколько экземпляров?

1 Ответ

1 голос
/ 01 мая 2011

Глядя на документацию по общей памяти Qt, я не понимаю, как ваше приложение использует общую память таким образом, чтобы отличаться от других приложений, пытающихся использовать общую память.

Вы используете ключ , который разделяют ваши приложения.Таким образом, можно установить через конструктор :

QSharedMemory::QSharedMemory ( const QString & key, QObject * parent = 0 )

или функцию setKey () :

void QSharedMemory::setKey ( const QString & key )

Но, если другое приложение использует тот же ключ, или угадайте ваш ключ, у вас могут возникнуть проблемы.Таким образом, одним из способов защиты от этого является некоторая форма запутывания для генерации вашего ключа.

Кроме того, один большой вопрос по поводу приведенного выше примера заключается в том, что для демонстрации общей памяти Qt они используют одно приложение, котороевы запускаете более одного раза, и между ними происходит совместное использование памяти.Можете ли вы разработать два совершенно разных компонента программного обеспечения, которые работают вместе через общую память, или это ограничено одним приложением, в котором открыто несколько экземпляров?

Использование общей памяти - это обмен данными.между отдельными процессами на том же хосте .Таким образом, это может быть несколько экземпляров одного и того же приложения или других приложений, которые знают или совместно используют ключ.

...