Упрощенный способ отправки данных в другой процесс (победа)? - PullRequest
0 голосов
/ 02 мая 2019

Предположим, вы разрабатываете два приложения для платформы Windows (A и B).

Платформа / система - Windows (Windows 10, если это имеет значение)

Как вы можете отправить некоторую информацию в B из A, если вам разрешено работать только на уровне языка c ++ (то есть: включая стандартные библиотеки и STL)? Это исключает любые сторонние библиотеки.

Я стараюсь избегать системного API, так как обычно оно требует значительного количества c-подобных программ (и поэтому не подходит для моих целей).

В этом конкретном сценарии оба процесса работают непрерывно, и отправка происходит из-за какого-то внешнего события (если оно имеет значение), поэтому, вероятно, необходима какая-то синхронизация.

Возможные решения на рассмотрении:

  1. Использование файлов через std::ofstream и std::ifstream может быть возможным решением (хотя и грубым)? - но как тогда добиться синхронизации?

  2. Даже перенаправление STDOUT на STDIN может быть вполне приемлемым, особенно если есть какой-то простой способ его настройки (например, запуск одной строки в командной строке - может быть возможно, если необходимо)

1 Ответ

1 голос
/ 02 мая 2019

Решение, включающее передачу через файл данных (в качестве способа синхронизации используется std::filesystem::rename, или вы можете сказать, избегайте его):

a.exe (писатель)

#include <filesystem>

auto tmpfile = std::filesystem::temp_directory_path() / "some_uuid.txt";
auto datafile = std::filesystem::temp_directory_path() / "data.txt";
std::ofstream(tmpfile) << "hello" << std::endl;

std::filesystem::rename(tmpfile, datafile);

b.exe (читатель)

auto datafile = std::filesystem::temp_directory_path() / "data.txt";
while (!std::filesystem::exists(datafile)) {
  ;//we have nothing else to do ?
}
std::ifstream input(data);
//read input etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...