В Unix есть popen()
, как упоминалось ранее, что дает вам FILE*
для чтения.
В качестве альтернативы в Unix вы можете использовать комбинацию pipe()
, fork()
, exec()
, select()
и read()
и wait()
для выполнения задачи более обобщенным / гибким способом.
Библиотечный вызов popen
вызывает fork
и pipe
под капотом для выполнения своей работы.Используя его, вы ограничены простым чтением того, что процесс выгружает в стандартный вывод (который вы можете использовать для перенаправления базовой оболочки).Используя низкоуровневые функции, вы можете делать практически все, что захотите, включая чтение stderr и запись stdin.
В окнах смотрите вызовы типа CreatePipe()
и CreateProcess()
с элементами ввода-вывода STARTUPINFO
установить на ваши трубы.Вы можете получить дескриптор файла для read()
, используя _open_ofshandle()
с дескриптором процесса.В зависимости от приложения может потребоваться чтение многопоточных или блокировка.