c++: вывод подпроцесса на stdin

Предположим, я хочу вызвать подпроцесс из моей программы, и я хочу прочитать вывод из этого подпроцесса в моей программе.

Вот тривиальный способ сделать это:

//somefile.cpp
system("sub_process arg1 arg2 -o file.out");
           //call the subprocess and have it write to file
FILE *f = std::fopen("file.out", "r");
//.... and so on

Мы все знаем, что операции ввода-вывода выполняются медленно. Чтобы ускорить это, я хотел бы пропустить шаг записи в файл, затем чтения из файла, и вместо этого перенаправить вывод этого подпроцесса непосредственно в stdin (или другой поток)

Как мне это сделать? Как мне пропустить операцию i/o?

Примечание: многие программы во время работы выплевывают в stdout диагностическую информацию и записывают чистую версию вывода в stdout (например: stdout: "step1...done, step2...done, step3...done" -o file-out: "The magic number is: 47.28"), поэтому игнорирование аргумента "-o " и доверие к тому, что вывод будет автоматически перенаправлен в stdout, не всегда полезно...

Заранее спасибо всем.

10
задан cmo 8 December 2011 в 21:58
поделиться