Обмен данными между двумя процессами

Штатно обмен данными между родительским процессом и дочерним происходит через каналы std::cout, cin, cerr.

Все их прекрасно знаете с незапамятных времён, когда изучали ещё язык С и учились программировать под Windows.

Класс QProcess красиво инкапсулирует эти стандартные потоки ввода-вывода внутри себя.

Таким образом реализовать обмен между родительским и порожденные процессом становится просто и удобно.

Откуда-то сыпятся непонятные данные

Но вот пример из личного опыта: собираем свою программу, подключаем разные библиотеки ( в том числе например от Атола fptr10.dll) и наблюдаем ситуацию, что в std::cout иногда сыпятся совсем не слабые данные. То есть библиотека fptr10.dll , то ли по ошибке разработчика то ли так и было задумано засоряет нам лог выполнения приложения своими данными. А оно нам надо?

Вот и встаёт вопрос: как можно альтернативно обмениваться данными между процессами.

QLocalSetver

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

Причем нам надо только указать название сервера (порт не надо знать) и все работает как надо.

Таким образом мы остановились на варианте QLocalServer плюс оставляем пока ещё std::cerr обмен (на всякий случай).