Я написал программу, которая запускает другой процесс и перенаправляет его стандартный ввод / вывод на каналы с помощью API Windows (CreateProcess, CreatePipe и т. Д.)
Программа должна запускать несколько различных консольных программ и взаимодействовать с ними с помощью stdio.
Это все работало хорошо (я мог писать в stdin процесса и читать из процесса, используя каналы), пока не попытался запустить программу и связаться с программой, которая использовала kbhit.
Чтобы упростить то, что та программа, которую я хотел бы запустить, делает со стандартным вводом:
while(1)
{
if(kbhit())
{
fgets(line, sizeof(line), stdin);
//do something with line
}
Sleep(100);
}
В результате fgets никогда не вызывается, потому что kbhit не возвращает true, даже если я написал в канал, на который перенаправил stdin. Я знаю это, потому что я отлаживал в другой программе. Я попытался удалить вызов kbhit, и тогда он работает, но я не могу изменить этот код.
Есть ли способ отправить что-то процессу, чтобы этот kbhit в дочернем процессе вернул true?