запустить exe / процесс с помощью stdin stdout и stderr?
С помощью C++ как запустить exe / процесс с помощью stdin stdout и stderr? Я знаю, как это сделать в .NET, и я помню, что использовал popen в прошлом, но popen, кажется, позволяет stdin или stdout не оба и не все 3.
Мне это нужно для windows, но решение linux приветствуется, так как оно понадобится мне для того же проекта в будущем.
4 ответа:
Для windows рассмотрим создание дочернего процесса с перенаправленным входом и выходом
Для unix, посмотрите на этотПример .
Вы должны использовать CreateProcess из WinApi. Он принимает в качестве аргумента объект типа
struct STARTUP_INFO
. Можно задать поля hstdin, hStdout и hStderr объекта для перенаправления потоков дочернего процесса на дескрипторы файлов, которые вы хотите (файл, канал, сокет...)
У меня были проблемы с порождением процессов и чтением или записью в их поток, но затем я обнаружил большую библиотеку C++, которая является очень удобной.
Этот проект с открытым исходным кодом называется библиотека крошечных процессов и был создан эйдхайм (большое ему спасибо).
Небольшая независимая от платформы библиотека, упрощающая создание и остановка новых процессов в C++, а также запись в stdin и чтение от stdout и stderr нового процесса.
Особенности
- никаких внешних зависимостей
- Простой в использовании
- платформа независимая
- читать отдельно от stout и stderr, используя анонимные функции
- напишите в stdin
- убить запущенный процесс (SIGTERM поддерживается в Unix-подобных системах)
- корректно закрывает файловые дескрипторы / дескрипторы
Я делюсь этим здесь, потому что я впервые пришел к этому нить, прежде чем найти библиотеку через несколько часов, так что я надеюсь, что это может сэкономить некоторое время для дальнейших читателей.
Портативным решением будет boost.процесс
(Примечание: эта библиотека была предложена в качестве библиотеки Boost и выпущена на тех же условиях лицензии, но официально не принята. См. также , где повысить.Процесс?)