Russian Qt Forum

Qt => Общие вопросы => Тема начата: deninok от Март 10, 2009, 22:49



Название: Программное перенаправление stdin
Отправлено: deninok от Март 10, 2009, 22:49
Уважаемые участники форума!

Подскажите, пожалуйста, как перенаправить стандартный поток ввода?

Есть программа А. Она должна запустить программу B, которая в свою очередь (на определённом этапе выполнения) ожидает от пользователя ввода (например, строки). Требуется, чтобы программа А заменила собой пользователя и сама обеспечила ввод строки.

Делаю нечто подобное...

Код:
#include <QProcess>

int main() {
    QString program( "B" );   // Исполняемый файл программы В существует и лежит здесь, в корне.
    QStringList arguments;
    arguments << "";
   
    QProcess prog;
    prog.setStandardInputFile( "stdin" );    // Файл существует, доступ разрешён.
   
    prog.execute( program, arguments );
   
    return 0;
}

В файле stdin уже записана некоторая строка. Я хочу, чтобы, когда программа B запросит ввод от пользователя, ожидаемая ею строка взялась из данного файла.
Однако такой код не работает.

Что делать, куда копать? Заранее благодарен за помощь, поскольку в Qt Assistant, к сожалению, не приводится программного примера использования функции setStandardInputFile(). Сказано лишь, что её вызов после запуска соответствующего процесса бесполезен (что, в общем-то, и так понятно).

Строго говоря, можно решить указанную проблему с помощью манипуляций с системными дескрипторами процесса (применяя вызовы ::open(), ::dup() и ::close()), однако это не совсем кошерно (нужно вставлять разные заголовочники для Windows и Linux, ведь решение мне нужно кроссплатформенное).