Я создал два исполняемых файла, которые принимают аргументы командной строки. Теперь я хочу передать аргументы доступным исполняемым файлам с помощью C ++ (выполнение в Windows). Каков наилучший способ сделать это?
я использовал CreateProcess()
; он работает нормально для статического ввода, но я хочу вводить динамически через CLI.
Командная строка (с аргументами) является одним из параметров CreateProcess (). Просто поместите туда любые аргументы, которые вы хотите передать дочернему исполняемому файлу.
Какие у вас проблемы с нестатическим вводом?
Я обычно использую system(const char*)
и это работает для меня 🙂
Вы передаете строку, которая содержит команду, когда вы вводите ее в командной строке. В вашем случае это означает путь к исполняемому файлу и принятые аргументы с пробелами между ними. Он запускает указанный процесс, как если бы он был запущен из командной строки.
Для дополнительной информации: http://www.cplusplus.com/reference/cstdlib/system/
Похоже, вы уже понимаете, что строковые аргументы могут быть отправлены через CreateProcess
во время запуска. Если вы хотите продолжить отправку данных во время выполнения, у вас есть несколько вариантов.
Используйте перенаправление консоли. Поскольку вы уже используете Win32 API, не так уж и сложно писать в cin дочернего процесса после его запуска. Увидеть эта статья MSDN. Я думаю, что это может быть то, что вы подразумеваете под «ввод динамически через CLI«
Используйте какой-то IPC. Есть Win32 способы сделать это, такие как очереди сообщений, и более независимые от платформы методы, такие как Буферы протокола, бережливость, или же Boost.Interprocess.
Когда дело доходит до IPC, на самом деле существует несколько способов обнажить кошку, и ваша цель состоит в том, чтобы провести исследование и убедиться, что вы приняли правильные проектные решения на ранних этапах взаимодействия ваших процессов.
Если вы решили использовать более полнофункциональный IPC, а не что-то вроде перенаправления консоли, чтобы решить небольшую проблему, вам следует задать себе несколько вопросов:
И два больших вопроса, которые всегда появляются:
Надеюсь, что этот ответ не является чрезмерным для вашего вопроса.