запустить exe / процесс с помощью stdin stdout и stderr? - PullRequest
9 голосов
/ 30 марта 2011

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

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

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

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

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

2 голосов
/ 23 сентября 2016

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

Этот проект с открытым исходным кодом называется tiny-process-library и был создан eidheim (большое ему спасибо ).

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

Особенности

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

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

2 голосов
/ 30 марта 2011

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

...