Как обеспечить функцию для другой программы для ее вызова? - PullRequest
1 голос
/ 22 марта 2012

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

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Если ваши программы выполняются как два отдельных процесса, вы не можете просто вызывать функции в другом процессе напрямую, вам потребуется Механизм межпроцессного взаимодействия (IPC) для связи между двумя процессами.

Обычно это делается следующим образом:
Процесс, с которым вы хотите связаться, предоставляет библиотеку на стороне клиента, Процесс или приложение, которое хочет связаться с процессом, связывается с этой библиотекой на стороне клиента.Эта клиентская библиотека предоставляет простые вызовы функций, которые ваш вызывающий процесс / приложение может вызывать напрямую.Клиентская библиотека реализует необходимый механизм IPC для связи с удаленным процессом.

1 голос
/ 22 марта 2012

Для этого существует множество механизмов: от создания собственного сервера до IPC, RPC, CORBA и др.

Что касается лучшего, то это зависит от множества факторов.*

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

1 голос
/ 22 марта 2012

Что я понимаю, так это то, что вам нужен клиентский API, который оборачивает связь с очередью.

Вам необходимо создать отдельную библиотеку, которая содержит и экспортирует API, и включить его в программы, которые хотят его использовать.

class Communicator
{
public:
    bool putData(Data* data);
    bool getData(Data*& data);
};

Реализация Communicator обеспечивает фактическую связь с очередью через IPC, но вы абстрагируете этот слой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...