запустить exe / process с stdin stdout и stderr?

С C ++, как я могу запустить exe / process с stdin stdout и stderr? Я знаю, как это сделать в .NET, и я помню, как использовать popen в прошлом, но popen, похоже, позволяет stdin OR stdout не для обоих, а не для всех 3.

Мне нужно это для окон, но решение для Linux приветствуется, поскольку в будущем он понадобится для того же проекта.

Для окон рассмотрим создание дочернего процесса с перенаправленными вводами и выводами

Для unix просмотрите этот образец .

Вы используете CreateProcess из WinApi. В качестве аргумента требуется объект типа struct STARTUP_INFO . Вы можете установить hStdin, hStdout и hStderr поля объекта, чтобы перенаправить эти streamи дочернего процесса в нужные дескрипторы файлов (файл, труба, сокет …)

У меня были проблемы с процессами нереста и чтения или записи в их stream, но затем я обнаружил отличную C ++-библиотеку, которая очень удобна .

Этот проект с открытым исходным кодом называется крошечной технологической библиотекой и был создан eidheim (большое спасибо ему).

Небольшая независимая от платформы библиотека упрощает создание и остановку новых процессов на C ++, а также запись на stdin и чтение из stdout и stderr нового процесса.

Особенности

  • Нет внешних зависимостей
  • Простой в использовании
  • Независимая платформа
  • Читайте отдельно от stout и stderr с помощью анонимных функций
  • Написать на stdin
  • Убейте запущенный процесс (SIGTERM поддерживается в Unix-подобных системах)
  • Правильно закрывает дескрипторы файлов / дескрипторы

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

Портативным решением будет boost.process

(Примечание: это было предложено в качестве библиотеки Boost и выпущено по тем же условиям лицензии, но официально не принято. См. Также Где Boost.Process? )

  • перенаправить stdout / stderr в строку
  • Сценарий Bash - хранить stderr в переменной
  • Могу ли я сделать cURL fail с exitCode, отличным от 0, если код статуса HTTP не равен 200?
  • Как сделать python 3 print () utf8
  • Отображение вывода командной строки Windows и redirect ее в файл
  • Разница между sys.stdout.write и печатью?
  • Как перенаправить вывод обратно на экран после freopen («out.txt», «a», stdout)
  • В Go, как мне записать stdout функции в строку?
  • Перенаправить stdout в файл, когда процесс выполняется в фоновом режиме
  • Заказ вывода в MPI
  • Код VBscript для захвата stdout, без отображения windows консоли
  • Давайте будем гением компьютера.